From 4bf06a8dd56b00ef06f6f920a7caf7a55fa9f1dd Mon Sep 17 00:00:00 2001 From: chriswmackey Date: Tue, 15 Oct 2024 22:25:37 +0000 Subject: [PATCH] deploy: update docs --- .nojekyll | 1 + README.md | 1 + docs/.buildinfo | 4 + docs/.doctrees/cli/index.doctree | Bin 0 -> 3575 bytes docs/.doctrees/cli/simulate.doctree | Bin 0 -> 14642 bytes docs/.doctrees/cli/validate.doctree | Bin 0 -> 7857 bytes docs/.doctrees/environment.pickle | Bin 0 -> 438447 bytes docs/.doctrees/index.doctree | Bin 0 -> 7998 bytes docs/.doctrees/modules.doctree | Bin 0 -> 2726 bytes docs/.doctrees/uwg.BEMDef.doctree | Bin 0 -> 37089 bytes docs/.doctrees/uwg.RSMDef.doctree | Bin 0 -> 34994 bytes docs/.doctrees/uwg.UBLDef.doctree | Bin 0 -> 18793 bytes docs/.doctrees/uwg.UCMDef.doctree | Bin 0 -> 36225 bytes docs/.doctrees/uwg.building.doctree | Bin 0 -> 62063 bytes docs/.doctrees/uwg.cli.doctree | Bin 0 -> 12476 bytes docs/.doctrees/uwg.cli.simulate.doctree | Bin 0 -> 3061 bytes docs/.doctrees/uwg.cli.validate.doctree | Bin 0 -> 3067 bytes docs/.doctrees/uwg.doctree | Bin 0 -> 4496 bytes docs/.doctrees/uwg.element.doctree | Bin 0 -> 50570 bytes docs/.doctrees/uwg.forcing.doctree | Bin 0 -> 11621 bytes docs/.doctrees/uwg.infracalcs.doctree | Bin 0 -> 9715 bytes docs/.doctrees/uwg.material.doctree | Bin 0 -> 16970 bytes docs/.doctrees/uwg.param.doctree | Bin 0 -> 33805 bytes docs/.doctrees/uwg.psychrometrics.doctree | Bin 0 -> 22094 bytes docs/.doctrees/uwg.readDOE.doctree | Bin 0 -> 9779 bytes docs/.doctrees/uwg.schdef.doctree | Bin 0 -> 59811 bytes docs/.doctrees/uwg.simparam.doctree | Bin 0 -> 17142 bytes docs/.doctrees/uwg.solarcalcs.doctree | Bin 0 -> 21140 bytes docs/.doctrees/uwg.urbflux.doctree | Bin 0 -> 9140 bytes docs/.doctrees/uwg.utilities.doctree | Bin 0 -> 28555 bytes docs/.doctrees/uwg.uwg.doctree | Bin 0 -> 210738 bytes docs/.doctrees/uwg.weather.doctree | Bin 0 -> 12888 bytes docs/.nojekyll | 0 docs/README.md | 1 + docs/_modules/index.html | 485 ++ docs/_modules/uwg/BEMDef.html | 714 ++ docs/_modules/uwg/RSMDef.html | 928 +++ docs/_modules/uwg/UBLDef.html | 631 ++ docs/_modules/uwg/UCMDef.html | 766 ++ docs/_modules/uwg/building.html | 1076 +++ docs/_modules/uwg/element.html | 938 +++ docs/_modules/uwg/forcing.html | 531 ++ docs/_modules/uwg/infracalcs.html | 514 ++ docs/_modules/uwg/material.html | 560 ++ docs/_modules/uwg/param.html | 608 ++ docs/_modules/uwg/psychrometrics.html | 607 ++ docs/_modules/uwg/readDOE.html | 944 +++ docs/_modules/uwg/schdef.html | 865 +++ docs/_modules/uwg/simparam.html | 558 ++ docs/_modules/uwg/solarcalcs.html | 734 ++ docs/_modules/uwg/urbflux.html | 635 ++ docs/_modules/uwg/utilities.html | 636 ++ docs/_modules/uwg/uwg.html | 2469 ++++++ docs/_modules/uwg/weather.html | 548 ++ docs/_sources/cli/index.rst.txt | 15 + docs/_sources/cli/simulate.rst.txt | 6 + docs/_sources/cli/validate.rst.txt | 6 + docs/_sources/index.rst.txt | 41 + docs/_sources/modules.rst.txt | 7 + docs/_sources/uwg.BEMDef.rst.txt | 7 + docs/_sources/uwg.RSMDef.rst.txt | 7 + docs/_sources/uwg.UBLDef.rst.txt | 7 + docs/_sources/uwg.UCMDef.rst.txt | 7 + docs/_sources/uwg.building.rst.txt | 7 + docs/_sources/uwg.cli.rst.txt | 19 + docs/_sources/uwg.cli.simulate.rst.txt | 7 + docs/_sources/uwg.cli.validate.rst.txt | 7 + docs/_sources/uwg.element.rst.txt | 7 + docs/_sources/uwg.forcing.rst.txt | 7 + docs/_sources/uwg.infracalcs.rst.txt | 7 + docs/_sources/uwg.material.rst.txt | 7 + docs/_sources/uwg.param.rst.txt | 7 + docs/_sources/uwg.psychrometrics.rst.txt | 7 + docs/_sources/uwg.readDOE.rst.txt | 7 + docs/_sources/uwg.rst.txt | 44 + docs/_sources/uwg.schdef.rst.txt | 7 + docs/_sources/uwg.simparam.rst.txt | 7 + docs/_sources/uwg.solarcalcs.rst.txt | 7 + docs/_sources/uwg.urbflux.rst.txt | 7 + docs/_sources/uwg.utilities.rst.txt | 7 + docs/_sources/uwg.uwg.rst.txt | 7 + docs/_sources/uwg.weather.rst.txt | 7 + docs/_static/basic.css | 925 +++ .../css/bootstrap-responsive.css | 1109 +++ .../css/bootstrap-responsive.min.css | 9 + .../_static/bootstrap-2.3.2/css/bootstrap.css | 6167 +++++++++++++++ .../bootstrap-2.3.2/css/bootstrap.min.css | 9 + .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 0 -> 12799 bytes docs/_static/bootstrap-2.3.2/js/bootstrap.js | 2287 ++++++ .../bootstrap-2.3.2/js/bootstrap.min.js | 6 + .../bootstrap-3.4.1/css/bootstrap-theme.css | 587 ++ .../css/bootstrap-theme.css.map | 1 + .../css/bootstrap-theme.min.css | 6 + .../css/bootstrap-theme.min.css.map | 1 + .../_static/bootstrap-3.4.1/css/bootstrap.css | 6834 +++++++++++++++++ .../bootstrap-3.4.1/css/bootstrap.css.map | 1 + .../bootstrap-3.4.1/css/bootstrap.min.css | 6 + .../bootstrap-3.4.1/css/bootstrap.min.css.map | 1 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes docs/_static/bootstrap-3.4.1/js/bootstrap.js | 2580 +++++++ .../bootstrap-3.4.1/js/bootstrap.min.js | 6 + docs/_static/bootstrap-3.4.1/js/npm.js | 13 + docs/_static/bootstrap-sphinx.css | 223 + docs/_static/bootstrap-sphinx.js | 175 + .../bootswatch-2.3.2/amelia/bootstrap.min.css | 9 + .../cerulean/bootstrap.min.css | 9 + .../bootswatch-2.3.2/cosmo/bootstrap.min.css | 9 + .../bootswatch-2.3.2/cyborg/bootstrap.min.css | 9 + .../bootswatch-2.3.2/flatly/bootstrap.min.css | 9 + .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 0 -> 12799 bytes .../journal/bootstrap.min.css | 9 + .../readable/bootstrap.min.css | 9 + .../simplex/bootstrap.min.css | 9 + .../bootswatch-2.3.2/slate/bootstrap.min.css | 9 + .../spacelab/bootstrap.min.css | 9 + .../bootswatch-2.3.2/spruce/bootstrap.min.css | 9 + .../superhero/bootstrap.min.css | 9 + .../bootswatch-2.3.2/united/bootstrap.min.css | 9 + .../cerulean/bootstrap.min.css | 11 + .../bootswatch-3.4.1/cosmo/bootstrap.min.css | 11 + .../bootswatch-3.4.1/cyborg/bootstrap.min.css | 11 + .../bootswatch-3.4.1/darkly/bootstrap.min.css | 11 + .../bootswatch-3.4.1/flatly/bootstrap.min.css | 11 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../journal/bootstrap.min.css | 11 + .../bootswatch-3.4.1/lumen/bootstrap.min.css | 11 + .../bootswatch-3.4.1/paper/bootstrap.min.css | 11 + .../readable/bootstrap.min.css | 11 + .../sandstone/bootstrap.min.css | 11 + .../simplex/bootstrap.min.css | 11 + .../bootswatch-3.4.1/slate/bootstrap.min.css | 11 + .../spacelab/bootstrap.min.css | 11 + .../superhero/bootstrap.min.css | 11 + .../bootswatch-3.4.1/united/bootstrap.min.css | 11 + .../bootswatch-3.4.1/yeti/bootstrap.min.css | 11 + docs/_static/custom.css | 65 + docs/_static/doctools.js | 156 + docs/_static/documentation_options.js | 13 + docs/_static/file.png | Bin 0 -> 286 bytes docs/_static/js/jquery-1.12.4.min.js | 5 + docs/_static/js/jquery-fix.js | 2 + docs/_static/language_data.js | 199 + docs/_static/minus.png | Bin 0 -> 90 bytes docs/_static/plus.png | Bin 0 -> 90 bytes docs/_static/pygments.css | 84 + docs/_static/searchtools.js | 620 ++ docs/_static/sphinx_highlight.js | 154 + docs/cli/index.html | 512 ++ docs/cli/simulate.html | 600 ++ docs/cli/validate.html | 564 ++ docs/genindex.html | 1404 ++++ docs/index.html | 548 ++ docs/modules.html | 596 ++ docs/objects.inv | Bin 0 -> 2373 bytes docs/py-modindex.html | 596 ++ docs/search.html | 493 ++ docs/searchindex.js | 1 + docs/uwg.BEMDef.html | 714 ++ docs/uwg.RSMDef.html | 664 ++ docs/uwg.UBLDef.html | 601 ++ docs/uwg.UCMDef.html | 654 ++ docs/uwg.building.html | 793 ++ docs/uwg.cli.html | 581 ++ docs/uwg.cli.simulate.html | 522 ++ docs/uwg.cli.validate.html | 522 ++ docs/uwg.element.html | 775 ++ docs/uwg.forcing.html | 580 ++ docs/uwg.html | 856 +++ docs/uwg.infracalcs.html | 574 ++ docs/uwg.material.html | 628 ++ docs/uwg.param.html | 640 ++ docs/uwg.psychrometrics.html | 637 ++ docs/uwg.readDOE.html | 589 ++ docs/uwg.schdef.html | 851 ++ docs/uwg.simparam.html | 607 ++ docs/uwg.solarcalcs.html | 626 ++ docs/uwg.urbflux.html | 570 ++ docs/uwg.utilities.html | 638 ++ docs/uwg.uwg.html | 1576 ++++ docs/uwg.weather.html | 583 ++ 190 files changed, 60247 insertions(+) create mode 100644 .nojekyll create mode 100644 README.md create mode 100644 docs/.buildinfo create mode 100644 docs/.doctrees/cli/index.doctree create mode 100644 docs/.doctrees/cli/simulate.doctree create mode 100644 docs/.doctrees/cli/validate.doctree create mode 100644 docs/.doctrees/environment.pickle create mode 100644 docs/.doctrees/index.doctree create mode 100644 docs/.doctrees/modules.doctree create mode 100644 docs/.doctrees/uwg.BEMDef.doctree create mode 100644 docs/.doctrees/uwg.RSMDef.doctree create mode 100644 docs/.doctrees/uwg.UBLDef.doctree create mode 100644 docs/.doctrees/uwg.UCMDef.doctree create mode 100644 docs/.doctrees/uwg.building.doctree create mode 100644 docs/.doctrees/uwg.cli.doctree create mode 100644 docs/.doctrees/uwg.cli.simulate.doctree create mode 100644 docs/.doctrees/uwg.cli.validate.doctree create mode 100644 docs/.doctrees/uwg.doctree create mode 100644 docs/.doctrees/uwg.element.doctree create mode 100644 docs/.doctrees/uwg.forcing.doctree create mode 100644 docs/.doctrees/uwg.infracalcs.doctree create mode 100644 docs/.doctrees/uwg.material.doctree create mode 100644 docs/.doctrees/uwg.param.doctree create mode 100644 docs/.doctrees/uwg.psychrometrics.doctree create mode 100644 docs/.doctrees/uwg.readDOE.doctree create mode 100644 docs/.doctrees/uwg.schdef.doctree create mode 100644 docs/.doctrees/uwg.simparam.doctree create mode 100644 docs/.doctrees/uwg.solarcalcs.doctree create mode 100644 docs/.doctrees/uwg.urbflux.doctree create mode 100644 docs/.doctrees/uwg.utilities.doctree create mode 100644 docs/.doctrees/uwg.uwg.doctree create mode 100644 docs/.doctrees/uwg.weather.doctree create mode 100644 docs/.nojekyll create mode 100644 docs/README.md create mode 100644 docs/_modules/index.html create mode 100644 docs/_modules/uwg/BEMDef.html create mode 100644 docs/_modules/uwg/RSMDef.html create mode 100644 docs/_modules/uwg/UBLDef.html create mode 100644 docs/_modules/uwg/UCMDef.html create mode 100644 docs/_modules/uwg/building.html create mode 100644 docs/_modules/uwg/element.html create mode 100644 docs/_modules/uwg/forcing.html create mode 100644 docs/_modules/uwg/infracalcs.html create mode 100644 docs/_modules/uwg/material.html create mode 100644 docs/_modules/uwg/param.html create mode 100644 docs/_modules/uwg/psychrometrics.html create mode 100644 docs/_modules/uwg/readDOE.html create mode 100644 docs/_modules/uwg/schdef.html create mode 100644 docs/_modules/uwg/simparam.html create mode 100644 docs/_modules/uwg/solarcalcs.html create mode 100644 docs/_modules/uwg/urbflux.html create mode 100644 docs/_modules/uwg/utilities.html create mode 100644 docs/_modules/uwg/uwg.html create mode 100644 docs/_modules/uwg/weather.html create mode 100644 docs/_sources/cli/index.rst.txt create mode 100644 docs/_sources/cli/simulate.rst.txt create mode 100644 docs/_sources/cli/validate.rst.txt create mode 100644 docs/_sources/index.rst.txt create mode 100644 docs/_sources/modules.rst.txt create mode 100644 docs/_sources/uwg.BEMDef.rst.txt create mode 100644 docs/_sources/uwg.RSMDef.rst.txt create mode 100644 docs/_sources/uwg.UBLDef.rst.txt create mode 100644 docs/_sources/uwg.UCMDef.rst.txt create mode 100644 docs/_sources/uwg.building.rst.txt create mode 100644 docs/_sources/uwg.cli.rst.txt create mode 100644 docs/_sources/uwg.cli.simulate.rst.txt create mode 100644 docs/_sources/uwg.cli.validate.rst.txt create mode 100644 docs/_sources/uwg.element.rst.txt create mode 100644 docs/_sources/uwg.forcing.rst.txt create mode 100644 docs/_sources/uwg.infracalcs.rst.txt create mode 100644 docs/_sources/uwg.material.rst.txt create mode 100644 docs/_sources/uwg.param.rst.txt create mode 100644 docs/_sources/uwg.psychrometrics.rst.txt create mode 100644 docs/_sources/uwg.readDOE.rst.txt create mode 100644 docs/_sources/uwg.rst.txt create mode 100644 docs/_sources/uwg.schdef.rst.txt create mode 100644 docs/_sources/uwg.simparam.rst.txt create mode 100644 docs/_sources/uwg.solarcalcs.rst.txt create mode 100644 docs/_sources/uwg.urbflux.rst.txt create mode 100644 docs/_sources/uwg.utilities.rst.txt create mode 100644 docs/_sources/uwg.uwg.rst.txt create mode 100644 docs/_sources/uwg.weather.rst.txt create mode 100644 docs/_static/basic.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap.min.css create mode 100644 docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png create mode 100644 docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png create mode 100644 docs/_static/bootstrap-2.3.2/js/bootstrap.js create mode 100644 docs/_static/bootstrap-2.3.2/js/bootstrap.min.js create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.min.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.min.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.min.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.min.css.map create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.eot create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.svg create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.ttf create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.woff create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.woff2 create mode 100644 docs/_static/bootstrap-3.4.1/js/bootstrap.js create mode 100644 docs/_static/bootstrap-3.4.1/js/bootstrap.min.js create mode 100644 docs/_static/bootstrap-3.4.1/js/npm.js create mode 100644 docs/_static/bootstrap-sphinx.css create mode 100644 docs/_static/bootstrap-sphinx.js create mode 100644 docs/_static/bootswatch-2.3.2/amelia/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/flatly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png create mode 100644 docs/_static/bootswatch-2.3.2/img/glyphicons-halflings.png create mode 100644 docs/_static/bootswatch-2.3.2/journal/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/readable/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/simplex/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/slate/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/spruce/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/superhero/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/united/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cerulean/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cosmo/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cyborg/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/darkly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/flatly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.eot create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.svg create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.ttf create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.woff create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.woff2 create mode 100644 docs/_static/bootswatch-3.4.1/journal/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/lumen/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/paper/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/readable/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/sandstone/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/simplex/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/slate/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/spacelab/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/superhero/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/united/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/yeti/bootstrap.min.css create mode 100644 docs/_static/custom.css create mode 100644 docs/_static/doctools.js create mode 100644 docs/_static/documentation_options.js create mode 100644 docs/_static/file.png create mode 100644 docs/_static/js/jquery-1.12.4.min.js create mode 100644 docs/_static/js/jquery-fix.js create mode 100644 docs/_static/language_data.js create mode 100644 docs/_static/minus.png create mode 100644 docs/_static/plus.png create mode 100644 docs/_static/pygments.css create mode 100644 docs/_static/searchtools.js create mode 100644 docs/_static/sphinx_highlight.js create mode 100644 docs/cli/index.html create mode 100644 docs/cli/simulate.html create mode 100644 docs/cli/validate.html create mode 100644 docs/genindex.html create mode 100644 docs/index.html create mode 100644 docs/modules.html create mode 100644 docs/objects.inv create mode 100644 docs/py-modindex.html create mode 100644 docs/search.html create mode 100644 docs/searchindex.js create mode 100644 docs/uwg.BEMDef.html create mode 100644 docs/uwg.RSMDef.html create mode 100644 docs/uwg.UBLDef.html create mode 100644 docs/uwg.UCMDef.html create mode 100644 docs/uwg.building.html create mode 100644 docs/uwg.cli.html create mode 100644 docs/uwg.cli.simulate.html create mode 100644 docs/uwg.cli.validate.html create mode 100644 docs/uwg.element.html create mode 100644 docs/uwg.forcing.html create mode 100644 docs/uwg.html create mode 100644 docs/uwg.infracalcs.html create mode 100644 docs/uwg.material.html create mode 100644 docs/uwg.param.html create mode 100644 docs/uwg.psychrometrics.html create mode 100644 docs/uwg.readDOE.html create mode 100644 docs/uwg.schdef.html create mode 100644 docs/uwg.simparam.html create mode 100644 docs/uwg.solarcalcs.html create mode 100644 docs/uwg.urbflux.html create mode 100644 docs/uwg.utilities.html create mode 100644 docs/uwg.uwg.html create mode 100644 docs/uwg.weather.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ + diff --git a/README.md b/README.md new file mode 100644 index 00000000..ebfb3665 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# documentation diff --git a/docs/.buildinfo b/docs/.buildinfo new file mode 100644 index 00000000..0fc2ad9c --- /dev/null +++ b/docs/.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: 58577eb06bae476b9b640b3d90502b1b +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/cli/index.doctree b/docs/.doctrees/cli/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b40dd81b9f0d539f1a0fa0168907f075d24b1fb6 GIT binary patch literal 3575 zcmbVPU27aS6iw{xr|q?!4^v2-ZYXIS8hi85htP)-NGVOz`k{orm9ch4yAsxnruvB2 z&_er=5*NKi{R4r#1oDUa8~P)9G&4Ip-Zr7sFtED1y1F{|+#~sy)*pXuTqyqBrp_79 zW(OomGMP~AT{n@jO=)KQOMmxQ|Fhq7Jw;Bmv?`|FU4Tc-xJVSu{14s@g1g~DA5`l* zn#P99tX|Gqtj#(<_&wHhEyInVjVafC^v&bp7c$m9_`v1TQ#uQKH)fvuGLLpnu&eQG z+x4P4O}6UVRd$E&lHeKjhjvU{pBSU~*czNFoMM$HI%M351<@Kt{BC6=Eq`?rn=b}q z5+5r%2|m_!44H;0&o`Sv zjqeV=yU3k=Qslf}y0d#oqlGkjt_LW|RFRxDi}B@CIgA;NkB59RG>i^onWiL5h5^+f z*F#?BNE6H`g+hzdq1AMFbcC}H_xBkU`O#5P%00H@9{k^UesR=?&7&goj^KtWBAR&* z{$+n`-(Muv2>5j~;QO)r3Q#|^WBOizKWDoIupKxTKsOh-^$N1GtYluHf7lxp>n~VV zSL{8+={_opRCUk}8fR`;pveFGp##Y$4Z`#b!gN7}T-q#Y;9mAMyMPXnu~D?y*wx&- zn8~iYUfm(+Nwl@%MJMhZy7e&gj0m0(L;Y{QvS^-Kv`4VefL|PCQP)k$ zETOq!{>epjI?0P}f-X#j9Q!lZW;{utTxV{h3Q!xmnN7!3(ZoNw;QED7X_<*r`1T=y ziwr|o{Ztiw4Pc!vx1igs@Yp{=hvigxvfPy?=RrmnFGvP~ofmMym!|DKTtTtU1rmHe zs1XvVqyfPNA6B-dK&y?aL#^K38@1rFd+w@HB-5pAMY)nwMRh5-Eh8alC7P8_0j>=I zUUY-lLP9bV)#ANAx0E98x|$lpvng(+?I8EXH8W8%GZZ{@?eB@OD1LoUwWT$=HU5xo z9=hI?LYRq>3jFB>CP7})9D_9_r9rCT&dj@uBk$JA6e8?<42OO-v`S#KfnrACLI|@+ zr4^WP>fPlD!er9W#^ejP5w1TlDVj~BO8pBr&|r2Rg_2^SM!@T(g$i0&q7!adG{2Ov zU$vmRr9gf~bE!-u=ram9S6rVFQ4d>go6a~;G{jgvcWSv-LdSNB?FJ`AWk3-gijowT z9!eI|aHNnQ&wyD(vsfnZ@~&siWdFgw=Jp5h37a zVJW&Hlzw5#HMNP1W@%v47Mo|-? zXOx!;C{wvbb2W53;TJa1R0Rb@VM4S7^OtS9{R$4z>LZDXQL6!`XE0wOlAjCP0>!*f@hHcJR?I>ln1iyy0Gux zzW*uk9H>dW6h2rM;Xj^-N9U5j*JG*vloNG^#tZ zK0u`Nz>qVyrB5?MW)b64Ch&p0mxK(wU)L!?m;Gqb(i%WrDaPe65;7*`MdNm3hPP9U z!k5hklnV&4`q<{!B0PzU>!Z>D+%>T9Yyu8cqHsB=gtp@)H=YLW3Q5XN43F7k56a+P zO3=Qi$beC5u*bC+UdItl2^SF_??H5nthcM@H@GS$rJ$X;Rhm5uk7Cy?r3AeTCgOF< z!y7I#L`^BA2@m3JBn4&}Xf0TS>orKZyL`@CK9gZav`IZ^2R+3L8}?2xmcRGdTlR*< z?1;T)udM5Z8FQK=)$n9}d&c53_WI1STVePHkLx46pNg zO`r?znOF(|#Bl~(B%Mc<{UyM7?!QA<;8l+P!oMUML?}0`1?8N1tu`06T&o^4;LbFZ Qv7ZFZtK=cv>UMnaH>xsmPyhe` literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/simulate.doctree b/docs/.doctrees/cli/simulate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..43bb7c2958e26137a366d5138be8463b9aee1904 GIT binary patch literal 14642 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/validate.doctree b/docs/.doctrees/cli/validate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..acfad8d0beea76b81f63c41dea60e4abe59ebe24 GIT binary patch literal 7857 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 HhrRy;*;W)g literal 0 HcmV?d00001 diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..5b1e40314b912a0cc8444f1ae3d74ad9bd40fa57 GIT binary patch literal 438447 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�)g^WpM

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

    1>+aA?!(-A6f%-MU&^I4QJWmGA{Td|_S; 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/modules.doctree b/docs/.doctrees/modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0aa11f778f1cf99f509ea7f6011d4c2adde84791 GIT binary patch literal 2726 zcmZ8jO=}!C7ckJXbnrHimw#GhZ;} z;^+A4pZGq$32t@b8kG3-Di<3i?!srW92Nm6%0+G%sXXIbWiR_$@#;a%Q)7hm#0 z=s4jd+t>gT?^Tg+*8Y1ks^_|S87nYJQ7fz8Cmj;d>H#jUVKN(il-?b5YmrW29juR3?4S76QQ_9sVl~ z{erG?RyrQf_fZa7R$W5zmQv5-ZRm25=VuTKJ-arvESZUPGqrU7?5^C&4!X)(6Lp4kU6J*& zDNH&&#Ob}dSydG1z;*?sN=MwvQE9xsVd=x8;R8zl_v?}X&0e%Qrm7~I9b4q z(vEFxehTA6W3-*D7TOf?Qu8T>T|8s1%mkzu7a zj!1UJP|n>j;Ofhs!cyj?4GLMLZ)zl6KVH8l!Vgoa_XfMkG{Wh|wX;u8ur zBTQvFhgJ*&?-pl2pIL$5Pq#M-Ge#T2smdiF2pAx@%*Ak6SAN4vr?L{m>AjtMCiurN zsg2$Rus-^9d*j~8aFh}N@GM7tBoc~YEU8+0x@0JKj`c2R86FyzX_FIh7_fnx#QKZS z&9qt|N0dY4Yc%j~m{9LDxf6w50j!O4UzDW9BdS^n1fXaXmC4{?C8^kuT7M@hE%Ui1 zt0JN4h^rkO;K^2AZL8lBR_9^LuKdNZ6H{)=W&-^JN5NaEaug?+qg0j5+vtoI&f7 zu!0In@CZpmw~G3>c}4)Ma#0Vo+px#fRl4RwzaAyvE|4fxF2D^(95qXZ(S$4h7(oG9 z4o?$|b6kXJl!ucoX?^iS3~P&a(M|IdZwAPFNm&2pZ}}S=21(#~Eu9HkliNYcW+!wvy8u@1={~`VX@Z)6$8sRNv(eK(} hJ2$q(2d%hj*+KKb07RClTf;n!wq^>X%iGVV{{!QQL4^PS literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.BEMDef.doctree b/docs/.doctrees/uwg.BEMDef.doctree new file mode 100644 index 0000000000000000000000000000000000000000..aa49f2c6a5da14f5307c79a3cc7527ed544084c0 GIT binary patch literal 37089 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.RSMDef.doctree b/docs/.doctrees/uwg.RSMDef.doctree new file mode 100644 index 0000000000000000000000000000000000000000..133c03c5832f13c7b116df1573c16421e6a51304 GIT binary patch literal 34994 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
    2o*{$1Wj$Qw9pSM7 zLv;2Y6lQT9PYc;k*cMw7&z8))w6cjUq;=`@T$euIb?HkZm%c=D57DcL2`K+79)!OP zZh08j*i^+NNr&&igG`1D@u>-psevrcl7?+8V#6{_uD~~-zM`Tyx0Ju3bOWb}Q#rPx z+~(ef7OHE&DD4^!cZOaSg(I=a8fI(Y!?DMXpE>>D=?7@W;W+5dsWq`H!9Hf7(c4X! zhsN7tW#Lw4O(Gbdm_=}gm@}zv^mi~8{rNV@D{zV=ngz5SfNTY zAWH!^rP9Qinrv>v4;ecVl|M&w>7OybP7Qf)>zsjR#gS6b(UH*6gW0f|;pW&hsW-#5 gaWT^hYw?j)4F_yO3oVki!%-Blo{^#9b7AiP08WE2r~m)} literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.UBLDef.doctree b/docs/.doctrees/uwg.UBLDef.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fc47b8e654813f42221554db867c05a2dd1d31b5 GIT binary patch literal 18793 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.building.doctree b/docs/.doctrees/uwg.building.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8564a9ec80800ee2f93f05715918415db3125896 GIT binary patch literal 62063 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 BQjq`v literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.cli.doctree b/docs/.doctrees/uwg.cli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..607683a4bf0ac1f37944a5bd7abdeb081fc7b14d GIT binary patch literal 12476 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 ByF35@ literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.cli.validate.doctree b/docs/.doctrees/uwg.cli.validate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..400f0115bb04d27c2c0b2234801bdc7426618178 GIT binary patch literal 3067 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.element.doctree b/docs/.doctrees/uwg.element.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4cd8483bc97c3117ef464aadf180a6d4eaadeb2d GIT binary patch literal 50570 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 M&YTv78%bm7zx6;#1poj5 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.infracalcs.doctree b/docs/.doctrees/uwg.infracalcs.doctree new file mode 100644 index 0000000000000000000000000000000000000000..491c03d4b6a2483f4b2eb650dd5daf2134493a8d GIT binary patch literal 9715 zcmcIqNslB)74BK8x~r#`=^0PkR=Z7EXmGWd?gnfS8b)kJ<}kR0hA{@oCdtZ-s>tlD z%yedCF9M^nke7K zvREo-(8J=6XGhFWUrOZ?br+5oZ)M|WV`d2_@QdNR!JB;crL@CavLPJdu}YJ?mhAVp z9KRQtmg!k>dl1+Ode8v$zj&7&5FwMgy`E|co1qDMM9NoW%P1J&7i2S|dq-aM9G|5- zN!OI~rVx?SO$7KQ{w_FnOuWomo*Boe#CO9t2l{KyPQtR#HLcx<^{7uGXNB3Prj#%9 zHNL#C!tquVgYL&~pHI4cMm8MZW(O63 zG-c*Te;Y(I*p3`UX-8fRO(#m_ss`~B?ctSxqHfr%)$`_#NX>+Q zkZ)Gl`21uxh@EoJw!*`k#2D!C`|Y4tUzR@()UlZ@Y?9fJ%#c_3lTSaJ_)1{nb}xw9 zBn63Q3Yy9?{lma-tCb>Vw6%fE%fNba=-q;**ZuJk1c~=^}L6 zs=%GA;tUiQEk^7>fJG7w>EuT%bUpvfb2n&XtQ&1+M1g73@4o4IH`;fz@?BNlPMKn^f7jjT1{jAp}~yiW#f3UBGOb*BQNO zB!xyDn6lTZRNo~OKbZ`LJm;rob?1raAA#o|!0=Dh&m5e0(DC~K6HbP*v8U$v=lED9-n!x{@nZOdNQvN_uS*-{hM$mou+|0~rX>_k*&?(4d zQ?*GxI!HX>802&rg%v;%hUJKK^372@B(G-9D15%HJ%{aE@JLg+oPQdoZ}A|in3Ch1 zqZT|hVMcu>Qu(l`%LDBu`%9P zJ5Hh=PSSSIOAgv_&@w-bgs^S;@YCQX6fW9>n5s}c_bbySyW$y>kiln@|F1Khuer}> z!~oouobNfzv$cemM`!MD;p(H>M}(JdMcL5$2{`}7{5+1eiCUG_suGm=G@!UIQ|~p` zr=N9x13m!MzNDfX*oPxjqWMx6GReeb23w@uh9lTuba*LQ*Kqi^H#gh(`5f!DwTftA zA>VPy!vvA(8MsXZe!nu4b^_GBu^b6aEU3AQmC0saEO~pchQxH5GhqKU5m;)e0lPMhLHLMvSjS0nesaS|hcL5r@o#r-Z;Th~W87f(W(}h03}j;cv5AONOAYZ(U92b4 zU&3FX=6Lv@df@OY=@=v96Uis3?hKpiW1W1fhS!PUHzvYQEmPoEEKQ`pgugz`@$kQR zTKK0<>ApeMan1eq2@Kb(x+{4?Nq73Jp6=?XuI>Oo!{>3wjVg6=_6~z?`GwzBluMv~ zSi^hz_GM1nyELe9+T7PFYmWE@*4-rZ7{z17e$d`Cy@Vm~h(Nmv+udy6p`%Sz48>O4 zofkIdbqGq`GH zerE)f&X5Bo5okRb3YzfJ)6((U4Ygav@`2MnHegD)J*0y-M?J2h$; zqKtA<`s4S%yf?akCGshCvzi6BPar}i^M5-l^GjgkFQ;anMrr0J>%MI2YfmcAZK^1M zGA~2;m7+I!n%wpO*$IfutP-jEsjSk})!jbnN_l1F>mvb-(c6mqB{fJ#5XO(_$n)VL zLh8LNiBk`D*ulVb{M3Eq!pw}E#cfX&!xP2lTuxW z>5*K>8uRiBdSp?JxahR(2YFrIk7lCvVkRiRqytf3Q->a9??xc$@LMYJ2&(e@BqGy~DIFI0Mi>QsWG-~hvLOOt zdg<*MIiL4oHi`+YcTO%@Nkkb@qsV_QDsA*w4EJiF5eU1;z4CW)0NfIYpiRf*9d{e~;9~*8o zSQG`3!4X087_zucA{F67xvY_|%+gS^q;kF1Qk%m4Dyi9$p0}hSAN|;HLv66UOgupL zVh)Hrl{s7VOuwI)eFnrSGmd{hL>xO82*fs* z%tQo6StZXS_KG}EG6;=ABmu0da3GD5Z+bN0vZ_(SPP<=Lg)vL)z(9r%y)LtZFo>B^ z9jT?g6KH|N2JePeo`)lEHt1c3|eX_z!s>cYl3!C z4fzNcB8+ctZ=*U!id}Hzy@RL^jk-oX6#?jJ&|MA|LM1j?xOx3UPXo`TsAtutr5@r`#WDB0&o|Eg4$$?QQXTgA>bE`-4a(w6u z^T6OvpL_U&{9g1Zk|!790be`W*4rIp@@@it(!9-+4bP~DrKZ6A-gF=2H_qX8hi)} zI771FNM5thYu8{ny*vY{Y_hwG>Xqzy3uM*nX`6N=FED?Po|ectZB3xQkVG6{4s=5p zIt8Jgm8^g$NS1)Pg+;gNA;~MLyfRcvabQ)A*?L8Rauf7U1>I+gS>D@R&dlu0UPpGuW4G7d>{)v*yIBV|lhr29f{@r`h=XM;9MkSOr)Ro* z`g9-qvOA+-v_=HHp%6*jNgxRr*yI5bf-n-0NCY7vA?3lm@DPM}0E7feBqHU32VVI8 zx^;D*%bc0rePE?M(_LMc|5ji9^;i9O#=h{Oj~wFv*j(E6{Ag#zX}6=e?WP5rY{#v< z<3?HWR&nu-;`O4*8i{i|jq{}C7VHpev^+m-CvH@{TCiEFp7~+ABHK@-ZY%TSNH_P! zym4>h)uQP&*jVOgp=*3%r}NueD;+0u6W0F~a8kjGQ_e;)rY;QvLU7)&QVr?bh9 zbsaw`*clsjIC-m~7a!N85d3=ktqQ!CxwHDU-9L|az8Ssl=O z9I}Q28&Hk2l{j6`;ETtSQ(PRln#fVZj9yehkyCWynR%l0%qN z_+qC%>?_NY%5-^Jb>7T8H|aQGD~{Sr)~z`7Tqj$y$RaOti8e9B9Ph}9qBwJEbCSL9 zm1|FBm|ttw1r2)(HL#s_otC?1=_=NR>(^m-d>YTQF`>9pL))f?FtFx8bYyVJ z4qHm$cq)6y%^s>cW`}PVj%oU&=oAXx&Ntk_+HCA}!ZpqZAgi0Wshiw#3u^15tt%(& zM<0N_8ybh@@!32hBo9<2h)_uCjj`huQ&FO*m6l@pt-)exvT2yeGC1R7u;Vl&R}6o5 zO^JD*@qU9i|ILzfkI^*Y#5OpwbxJ3dsVO4Mf|9;J7)IYD(I<$Tq#*{=^>$ynPI0;j zLpm-Nh|mXK8lrs9;3*(2RT-l0!fZZmG#4x$5;CNjXV<0CTYH{W%1W91&0v|Z!%?p( z|23HZ7S^VLrmVF0m#FyX(AZxoKw}ef;tTq}GoXCFtXER`y}?v^-|d-hMB_gmjK*VJ zlzd4q2{a1lnRqEl`{BMx`@ud)8w?pFXZC0(4>R8;kHOYB)u#xg7ZYey!8PideAjt4F6F4LI{0vH-0FOX3&#g%N4mSTUhOW6HMXJ$(&%;S zW+7O^pJ7I?jUre;O}Ox6A|1z%ir^*{OrRj!?ZQmuV$P;f;_h@qzvaW!d4=0f65+7{ z`AP%e+9dLXz{&bdTUA^Wp;w8}MfTtqSa44|9JctAb-@)3ULzW~HyA9_qp-2kg67m3 zXK`t-2ppYfJ>{huw`4!w;)wp}!;yf&PJ>Nt`fk`3AXP4q5@fLJ;-3veRj#IPSzqm@ zKCTwsREfkaDy8u&`;kU)hiWebuhXAJZwZ=#7BQD3{Tp$6w}(o6p56eqxLJSxXj|DJ zc(ySgJH5?IWq;6E@U7)#Yd!C5xQVqHCzkwTkvE-V`+CdIcCA-_&gv{*wr(z8epMI- zxzw|A+S}Or#L<>9Uez6tFwoyc2)@2AvE375dmDcsF1X*;zukGuaGnGDQh~I2wzMzq zN`=d3vuUHfTA(Urr7o`@soKME^SVa07lWMGfBfbIbZ`|VVv#DDGEiUOSMWtN zs6tw^0&{&92Mu|_OEjo(8wacxFYkv5?)gX#Cc(jroP*(fb2!j^Q>zzvt11(Xs%i{Z zT%+n>l#LI{Lj%-o@0$l|C3qM-)!4Z3EDCn`8NOZO^R6O>^$`aCC~;P4C5&e9z_cd* zSfv%2+LaN;y4=%B%~2TXfg+vW&$COLN!+p9ek*HUw3_B7QiryLgKS|5_Tn}|o=^0x zwW2$!20yj;t%1a@%@(h%3fLpcDKC3#ww=sTam_&2yjqK43hMR~$(-hXzi4Od5#J#x z8y_2GI`fZ7t-Z#8Iscd5vTZsA@Yz6O9H-dzBGzrH@^8(__u$NJ2gp|sf z2r2QGlEnWQN@D+jSMaZBG;EKp_&{7P_?Hpt22)riR1m2@=fUxwg=An@u(I>sBTB?h z^-ijy8Y3V~65%3)w0guS_#^Nsf=0m;AT_Y?Q&Dd4G)ii5qTszK^X>%~sKxYA{50w5 zG@e))Rc3~9{dy5RL;alTCA)c%2k{X+(iQ{x|FKkXz7Z^;p|T&f)76VDd-g_x{ex>c z+GVvwsKz2=M=`-5oEs12|&CfKTUuw&eCQPzKZG7LF>a$mg2?aA|K)PJi^Urd|8=J4|VnJ7hF?{BEj0nczD zxXx)CYKwu~RFF!Btxp6Qa#Qil2))Wpg|b5J3pChq6;;^?^)YLhOQ=VJ1 z&M7Q7w={K*_MTLBBaT`LPKT(>i0|Oj<&`U!FE3fvQ)+uLFuF5!PWrXf>gta__uQ5D ztz4ppqiofuURN8C{|}@J!+{m#&{w+0nG*tsF9JK-9yYEb z+@HhfYyz;(BizB~>6M>An(tA(EUsK2)*Z#_aaI*C)Afp7@IE6ys`rzqAx|e#U1=_g zRhg;nukhcm^55U(zrV+S-=<&ELlp^2Y7UHs=Xp4KK=h(3;*GnAT)d}06!Igm%8e}} zXu)21pg1VT+6x4aE0bFh^#OBDuMB>?zYKmT?)DS;z?CQ-g55R39*fYYiI;naJvyuU^z zO1>nC8XYCiQVW5SKdU*a8EAD6u251504OOs8HAGMB&v9#0w+5dRN!PpPaG%t)BWJ2 zrsu#oxnyjU1_gT+HUKW4><^blCxgAmmmergT{mmLfS+y}c|*Td}vw&nIvH+lF#`y**u$}aZ?+W)P!sF`Gcprv6(1=|1C13ciE zffg%AH{*nEgmd>3V*+NBoT^+84}z2o1#{F*9bEql4BsEP_L`0W)~7L?39On?1*+#! zL4m5G4WRl1se-=eK*oN404ze#>YABx!wi^uWfV}|t91#gOGA}nZia|Qy2|=}VoZSQ zMcH`R*(91NP*oz)og4^MZ(vXXsy{(b98~$!{eY@qs)wE$|B?}LM_ie4xpxv**!jI_ zd6&75GyZ}m{}Y;g{&W!Xk?tpBw;<}Z;74B5+_PSp5&EDOJa9<29%8 z4zt--o>2Ovt&=5ZREbEMWRo(0joi?alwQe`J#kh__w(C04|vH5b7Uc^d&ju>o@d=W zE7rZab=KH&kqGHz$bP^J&e_~Fb2?qTOeb-ifmGZk+rj;t)dJ~EJjWEb%A##ln3At~ z65{PR2sV&Mal-76OuQ28RNYaY_ayG)?BV)3f*W6h8X%CWMO>l#056nb-OmDW?+`K zxWJID(uK8ycA6UO5iiTS>DuZlic{p}(&^kvoNQr6ou!(b0MxW`Js#@GppHqDFQ32k z9OOBhY_@9MQ%TwVdsX*zNKPiZ?ItU}n{Dzj00^sI)(J6KBXc$|i`to2+?-^Ku*r_C zC#PmWCWPK)C(>QS&39~lidY~`n{L#znY4q3@@GdCuTqI}RWoKKcwQajdtqE;p(G%`+s!z&1c-U&VDKPCWJL*QaC=Z=Y z3N*p=g(c$b(Z}4#Y?1QC?dBwif@NiZTU@lo)l))qcB)cJVPRg3-Zu3MWrI;tJE~7m zp?D5np=Ix7{G_Zw#r$XzmH3CdsrMxE%=vdLZr5;!cUvRNm-RrGG3S zNmc+3&er>qU$Bk?6I*dkh=)b9g}W}W9asrg#fclT{4Hqq)5Rw+zmbIpq=2EMFljNM ihQ>mHz`4WH(p< literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.param.doctree b/docs/.doctrees/uwg.param.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d72274297cf529fcbd65bbc3db8a8bcd72d6d418 GIT binary patch literal 33805 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 Y>`tAmdAWNYuaKzIC>#w~A*=KM3+pE6DgXcg literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.psychrometrics.doctree b/docs/.doctrees/uwg.psychrometrics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..14878d77f6dc2abb013712be448bba7612d13e60 GIT binary patch literal 22094 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 k|70E>%erNSHD%7|SL$u@@n?Yr1Quy42m( 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 Cwyw?q literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.solarcalcs.doctree b/docs/.doctrees/uwg.solarcalcs.doctree new file mode 100644 index 0000000000000000000000000000000000000000..75292d46940e9ca4a78907202fc72ea1ef88ed57 GIT binary patch literal 21140 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.urbflux.doctree b/docs/.doctrees/uwg.urbflux.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9e7f3d54f18f63eba7388e4a0f36fd87e938ae23 GIT binary patch literal 9140 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 z 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 Za<*8{5$lXo!vUKmqqP(?EI0y={3jL>tmgm# literal 0 HcmV?d00001 diff --git a/docs/.doctrees/uwg.weather.doctree b/docs/.doctrees/uwg.weather.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6fe5c5fef9aed0fc4a62288fbb226e8d9b55e41f GIT binary patch literal 12888 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 + + + + + + Overview: module code — uwg documentation + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/BEMDef.html b/docs/_modules/uwg/BEMDef.html new file mode 100644 index 00000000..87eb5a96 --- /dev/null +++ b/docs/_modules/uwg/BEMDef.html @@ -0,0 +1,714 @@ + + + + + + + uwg.BEMDef — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.BEMDef

    +"""Building Energy Model (BEM) class definition."""
    +
    +from .building import Building
    +from .element import Element
    +from .utilities import REF_BUILTERA_SET, REF_BUILTERA
    +
    +try:
    +    str = basestring
    +except NameError:
    +    pass
    +
    +
    +
    +[docs] +class BEMDef(object): + """Building Energy Model (BEM) definition. + + Args: + building: Building object. + mass: Element object representing building internal mass. + wall: Element object representing building wall. + roof: Element object representing building roof. + bldtype: Text referring to a building type. By default, 16 building types are + defined in the UWG according to models from the Department of Energy (DOE). + Custom building types can also be defined with a new name. Note that this + value along with the BEMDef builtera must exactly match the identifiers in + the UWG bld list in order to specify the fraction of total built stock the + building occupies in the UWG simulation. Choose from the following to + reference or overwrite a BEM associated with a DOE reference building type: + 'fullservicerestaurant', 'hospital', 'largehotel', 'largeoffice', + 'mediumoffice', 'midriseapartment', 'outpatient', 'primaryschool', + 'quickservicerestaurant', 'secondaryschool', 'smallhotel', 'smalloffice', + 'standaloneretail', 'stripmall', 'supermarket', or 'warehouse'. + builtera: Text defining building built era. Must be one of the following: + "pre80" (pre-1980s), "pst80" (post-1980s), or "new" (new construction). + This value along with the bldtype must exactly match the identifiers in + the bld array in order to specify the fraction of total built stock the + building occupies in the UWG simulation. + + Properties: + * building -- Building object + * mass -- Element object representing building internal mass. + * wall -- Element object representing building wall. + * roof -- Element object representing building roof. + * frac -- fraction of the urban floor space of this building typology. + * bldtype -- number for building type + * builtera -- number for built era + * fl_area -- building typology urban floor area [m2] + * elec -- actual electricity consumption [W/m2] + * gas -- actual gas consumption [W/m2] + * light -- actual light [W/m2] + * Qocc -- actual heat load from occupant [W/m2] + * swh -- actual hot water usage + * Nocc -- number of occupants + * ElecTotal -- actual total electricity [W/m2] + * T_wallex -- wall surface temp (ext) [K] + * T_wallin -- wall surface temp (int) [K] + * T_roofex -- roof surface temp (ext) [K] + * T_roofin -- roof surface temp (int) [K] + """ + + def __init__(self, building, mass, wall, roof, bldtype, builtera): + + # Initialization + self.building = building + self.mass = mass + self.wall = wall + self.roof = roof + + # Properties to be set in readDOE + self.bldtype = bldtype # DOE reference building type + self.builtera = builtera # pre80, pst80, new + self.zonetype = None # climate zone number (only used in testing). + + # Properties to be computed during UWG simulation + self.frac = 0.0 + self.fl_area = 0 + self.elec = 0 + self.gas = 0 + self.light = 0 + self.Qocc = 0 + self.swh = 0 + self.Nocc = 0 + self.ElecTotal = 0 + self.T_wallex = 293 + self.T_wallin = 293 + self.T_roofex = 293 + self.T_roofin = 293 + +
    +[docs] + @classmethod + def from_dict(cls, data): + """Create a BEMDef object from a dictionary. + + Args: + data: A BEMDef dictionary following the format below. + + .. code-block:: python + { + "building": building.to_dict() # dictionary representation of a Building. + "mass": mass.to_dict() # dictionary representation of mass Element. + "wall": wall.to_dict() # dictionary representation of wall Element. + "roof": roof.to_dict() # dictionary representation of roof Element. + "bldtype": 0, # building type index + "builtera": 1, # built era index + } + """ + assert data['type'] == 'BEMDef', 'Expected ' \ + 'BEMDef dictionary. Got {}.'.format(data['type']) + + building = Building.from_dict(data['building']) + mass = Element.from_dict(data['mass']) + wall = Element.from_dict(data['wall']) + roof = Element.from_dict(data['roof']) + bldtype, builtera = data['bldtype'], data['builtera'] + + return cls(building, mass, wall, roof, bldtype, builtera)
    + + + @property + def building(self): + """Get or set Building object.""" + return self._building + + @building.setter + def building(self, value): + assert isinstance(value, Building), 'building must be a Building ' \ + 'object. Got: {}.'.format(value) + self._building = value + + @property + def mass(self): + """Get or set Element as representative building internal mass.""" + return self._mass + + @mass.setter + def mass(self, value): + assert isinstance(value, Element), 'mass must be an Element object. ' \ + 'Got: {}.'.format(value) + self._mass = value + + @property + def roof(self): + """Get or set Element as representative building roof.""" + return self._roof + + @roof.setter + def roof(self, value): + assert isinstance(value, Element), 'roof must be an Element object. ' \ + 'Got: {}.'.format(value) + self._roof = value + + @property + def wall(self): + """Get or set Element as representative building wall.""" + return self._wall + + @wall.setter + def wall(self, value): + assert isinstance(value, Element), 'wall must be an Element object. ' \ + 'Got: {}.'.format(value) + self._wall = value + + @property + def bldtype(self): + """Get or set text for building type. + + By default, 16 building types are defined in the UWG according to models from + the Department of Energy (DOE). Choose from the following to reference or + overwrite a BEM associated with a DOE reference building type: + + * 'fullservicerestaurant' + * 'hospital' + * 'largehotel' + * 'largeoffice' + * 'medoffice' + * 'midriseapartment' + * 'outpatient' + * 'primaryschool' + * 'quickservicerestaurant' + * 'secondaryschool' + * 'smallhotel' + * 'smalloffice' + * 'standaloneretail' + * 'stripmall' + * 'supermarket' + * 'warehouse' + + Custom building types can also be defined with a new name. If a custom BEMDef is + defined with the same name as a reference DOE building type from the list above, + the reference BEMDef will be overwritten by the custom BEMDef. Note that this + value along with the BEMDef builtera must exactly match the identifiers in the + UWG bld list in order to specify the fraction of total built stock the building + occupies in the UWG simulation. + + """ + return self._bldtype + + @bldtype.setter + def bldtype(self, value): + assert isinstance(value, str), 'The bldtype must be a string. ' \ + 'Got: {}.'.format(value.lower()) + self._bldtype = value + + @property + def builtera(self): + """Get or set text for built era. + + Must be one of the following: + + * 'pre80' - pre-1980s + * 'pst80' - post-1980s + * 'new' - new construction + + This value along with the bldtype must exactly match the identifiers in + the bld array in order to specify the fraction of total built stock the + building occupies in the UWG simulation. + """ + return self._builtera + + @builtera.setter + def builtera(self, value): + assert isinstance(value, str) and value in REF_BUILTERA_SET, \ + 'The builtera must be one of {}.Got: {}.'.format( + REF_BUILTERA, value.lower()) + self._builtera = value + +
    +[docs] + def to_dict(self): + """BEMDef dictionary representation.""" + base = {'type': 'BEMDef'} + base['building'] = self.building.to_dict() + base['mass'] = self.mass.to_dict() + base['wall'] = self.wall.to_dict() + base['roof'] = self.roof.to_dict() + base['bldtype'] = self.bldtype + base['builtera'] = self.builtera + return base
    + + + def __repr__(self): + return 'BEMDef,\n bldtype: {}\n builtera: {}\n mass: {}\n ' \ + 'wall: {}\n roof: {}\n frac: {}'.format( + self.bldtype, self.builtera, self.mass.name, + self.wall.name, self.roof.name, self.frac)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/RSMDef.html b/docs/_modules/uwg/RSMDef.html new file mode 100644 index 00000000..54dac62a --- /dev/null +++ b/docs/_modules/uwg/RSMDef.html @@ -0,0 +1,928 @@ + + + + + + + uwg.RSMDef — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.RSMDef

    +"""Class for Rural Site Model (RSM) and Vertical Diffusion Model (VDM)."""
    +from __future__ import division, print_function
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +import os
    +from math import sqrt, pow, log
    +from .utilities import is_near_zero
    +
    +# TODO: Method and arg docstrings are incomplete. Should be completed by someone who
    +# understands RSM and VSM dynamics.
    +
    +
    +
    +[docs] +class RSMDef(object): + """Rural Site Model (RSM) and Vertical Diffusion Model (VDM). + + This class calculates the vertical profiles of air temperature above the weather + station[1]. + + Note: + [1] 'The uwg' (2012) Eq. 4, 5, 6. + + Args: + lat: Number for latitude in degrees. + lon: Number for longitude in degrees. + gmt: Number for GMT hour correction. + height: Number for rural average obstacle height in meters. + T_init: Number for initial dry bulb temperature. + P_init: Number for initial pressure. + parameter: Param object for geographic parameters. + z_meso_path: Text string for height reference data filepath for mesoscale + component. + + Properties + * z_meso -- list of mesoscale heights. + * lat -- latitude [deg] + * lon -- longitude [deg] + * gmt -- GMT hour correction + * height -- average obstacle height [m] + * z0r -- rural roughness length [m] + * disp -- rural displacement lenght [m] + * z -- vertical height [m] + * dz -- vertical discretization [m] + * nz0 -- layer number at zmt [m] + * nzref -- layer number at zref [m] + * nzfor -- layer number at zfor [m] + * nz10 -- layer number at zmu [m] + * nzi -- layer number at zi_d [m] + * tempProf -- potential temperature profile at the rural site [K] + * presProf -- pressure profile at the rural site [Pa] + * tempRealProf -- real temperature profile at the rural site [K] + * densityProfC -- density profile at the center of layers [kg m-3] + * densityProfS -- density profile at the sides of layers [kg m-3] + * windProf -- wind profile at the rural site [m s-1] + * ublPres -- average pressure at UBL [Pa] + """ + + def __init__(self, lat, lon, gmt, height, T_init, P_init, parameter, z_meso_path): + + self.z_meso = RSMDef.load_z_meso(z_meso_path) + self.lat = lat + self.lon = lon + self.gmt = gmt + self.height = height + self.z0r = 0.1 * height + self.disp = 0.5 * height + + # vertical grid at the rural site + self.z = [0 for x in range(len(self.z_meso)-1)] + self.dz = [0 for x in range(len(self.z_meso)-1)] + + # Initialize empty parameters to compute for RSMDef + self.nz0 = None + self.nzref = None + self.nzfor = None + self.nz10 = None + self.nzi = None + self.tempProf = None + self.presProf = None + self.tempRealProf = None + self.densityProfC = None + self.densityProfS = None + self.windProf = None + self.ublPres = None + + for zi in range(len(self.z_meso)-1): + self.z[zi] = 0.5 * (self.z_meso[zi] + self.z_meso[zi+1]) + self.dz[zi] = self.z_meso[zi+1] - self.z_meso[zi] + + # Define initial booleans + ll = True + mm = True + nn = True + oo = True + pp = True + + # Define self.nz0, self.nzref, self.nzfor, self.nz10, self.nzi + for iz in range(len(self.z_meso)-1): + # self.nz0: self.z index >= reference height for weather station + eq_th = is_near_zero(self.z[iz] - parameter.tempHeight) + if (eq_th or self.z[iz] > parameter.tempHeight) and ll: + self.nz0 = iz + 1 # layer number at zmt (m) + ll = False + + # self.nzref: self.z index >= reference inversion height + eq_rh = is_near_zero(self.z[iz] - parameter.refHeight) + if (eq_rh or self.z[iz] > parameter.refHeight) and mm: + self.nzref = iz + 1 # layer number at zref (m) + mm = False + + # self.nzfor: self.z index >= nighttime boundary layer height + eq_nh = is_near_zero(self.z[iz] - parameter.nightBLHeight) + if (eq_nh or self.z[iz] > parameter.nightBLHeight) and nn: + self.nzfor = iz + 1 # layer number at zfor (m) + nn = False + + # self.nz10: self.z index >= wind height + eq_wh = is_near_zero(self.z[iz] - parameter.windHeight) + if (eq_wh or self.z[iz] > parameter.windHeight) and oo: + self.nz10 = iz + 1 # layer number at zmu (m) + oo = False + + eq_dh = is_near_zero(self.z[iz] - parameter.dayBLHeight) + if (eq_dh or self.z[iz] > parameter.dayBLHeight) and pp: + self.nzi = iz + 1 # layer number at zi_d (m) + pp = False + + # Define temperature, pressure and density vertical profiles + self.tempProf = [T_init for x in range(self.nzref)] + self.presProf = [P_init for x in range(self.nzref)] + + for iz in range(1, self.nzref): + self.presProf[iz] = ( + (self.presProf[iz-1] ** (parameter.r / parameter.cp) - parameter.g / + parameter.cp * (P_init ** (parameter.r / parameter.cp)) * + (1. / self.tempProf[iz] + 1. / self.tempProf[iz-1]) * 0.5 * + self.dz[iz]) ** (1. / (parameter.r / parameter.cp))) + + self.tempRealProf = [T_init for x in range(self.nzref)] + for iz in range(self.nzref): + self.tempRealProf[iz] = ( + self.tempProf[iz] * (self.presProf[iz] / P_init) ** + (parameter.r / parameter.cp)) + + self.densityProfC = [None for x in range(self.nzref)] + for iz in range(self.nzref): + self.densityProfC[iz] = \ + self.presProf[iz] / parameter.r / self.tempRealProf[iz] + + self.densityProfS = [self.densityProfC[0] + for x in range(self.nzref + 1)] + + for iz in range(1, self.nzref): + self.densityProfS[iz] = ( + (self.densityProfC[iz] * self.dz[iz-1] + self.densityProfC[iz-1] * + self.dz[iz]) / (self.dz[iz-1]+self.dz[iz])) + + self.densityProfS[self.nzref] = self.densityProfC[self.nzref-1] + self.windProf = [1 for x in range(self.nzref)] + +
    +[docs] + def vdm(self, forc, rural, parameter, simTime): + """Vertical Diffusion Model[1]. + + Note: + [1] 'The uwg' (2012), Eq. (4) + """ + + self.tempProf[0] = forc.temp # Lower boundary condition + + # compute pressure profile + for iz in reversed(list(range(self.nzref))[1:]): + self.presProf[iz-1] = ( + (pow(self.presProf[iz], parameter.r / parameter.cp) + + parameter.g / parameter.cp * + (pow(forc.pres, parameter.r / parameter.cp)) * + (1./self.tempProf[iz] + 1./self.tempProf[iz-1]) * + 0.5 * self.dz[iz]) ** (1. / (parameter.r / parameter.cp))) + + # compute the real temperature profile + for iz in range(self.nzref): + self.tempRealProf[iz] = ( + self.tempProf[iz] * (self.presProf[iz] / forc.pres) ** + (parameter.r / parameter.cp)) + + # compute the density profile + for iz in range(self.nzref): + self.densityProfC[iz] = \ + self.presProf[iz] / parameter.r / self.tempRealProf[iz] + self.densityProfS[0] = self.densityProfC[0] + + for iz in range(1, self.nzref): + self.densityProfS[iz] = ( + (self.densityProfC[iz] * self.dz[iz-1] + self.densityProfC[iz-1] * + self.dz[iz]) / (self.dz[iz-1] + self.dz[iz])) + + self.densityProfS[self.nzref] = self.densityProfC[self.nzref-1] + + # Ref: The uwg (2012), Eq. (5) + # compute diffusion coefficient + cd, ustarRur = self.diffusion_coefficient( + self.densityProfC[0], self.z, self.dz, self.z0r, self.disp, self.tempProf[0], + rural.sens, self.nzref, forc.wind, self.tempProf, parameter) + + # solve diffusion equation + self.tempProf = RSMDef.diffusion_equation( + self.nzref, simTime.dt, self.tempProf, self.densityProfC, self.densityProfS, + cd, self.dz) + + # compute wind profile + # N.B In Matlab, negative values are converted to complex values. + # log(-x) = log(x) + log(-1) = log(x) + i*pi + # Python will throw an exception. Negative value occurs here if + # VDM is run for average obstacle height ~ 4m. + for iz in range(self.nzref): + try: + self.windProf[iz] = ustarRur / parameter.vk * \ + log((self.z[iz] - self.disp) / self.z0r) + except ValueError: # math domain error occurred + self.windProf[iz] = 0 + + # Average pressure + self.ublPres = 0. + for iz in range(self.nzfor): + self.ublPres = ( + self.ublPres + self.presProf[iz] * self.dz[iz] / + (self.z[self.nzref-1] + self.dz[self.nzref-1] / 2.))
    + + +
    +[docs] + def diffusion_coefficient(self, rho, z, dz, z0, disp, tempRur, heatRur, nz, uref, th, + parameter): + # Initialization + Kt = [0 for x in range(nz+1)] + ws = [0 for x in range(nz)] + te = [0 for x in range(nz)] + # Friction velocity (Louis 1979) + ustar = parameter.vk * uref/log((10.-disp)/z0) + + # Monin-Obukhov length + lengthRur = max(-rho * parameter.cp * ustar ** 3 * tempRur / parameter.vk / + parameter.g / heatRur, -50.) + + if heatRur > 1e-2: + # Unstable conditions + + # Convective velocity scale + wstar = ( + (parameter.g * heatRur * parameter.dayBLHeight / rho / parameter.cp / + tempRur) ** (1 / 3.)) + # Wind profile function + phi_m = (1-8. * 0.1 * parameter.dayBLHeight / + lengthRur) ** (-1. / 3.) + + for iz in range(nz): + # Mixed-layer velocity scale + ws[iz] = ( + (ustar ** 3 + phi_m * parameter.vk * wstar ** 3 * z[iz] / + parameter.dayBLHeight) ** (1 / 3.)) + + # TKE approximation + te[iz] = max(ws[iz] ** 2., 0.01) + + else: + # Stable and neutral conditions + for iz in range(nz): + # TKE approximation + te[iz] = max(ustar ** 2., 0.01) + + # lenght scales (l_up, l_down, l_k, l_eps) + self.dlu, self.dld = RSMDef.dissipation_bougeault( + parameter.g, nz, z, dz, te, th) + self.dld, dls, dlk = RSMDef.length_bougeault(nz, self.dld, self.dlu, z) + + # Boundary-layer diffusion coefficient + for iz in range(nz): + Kt[iz] = 0.4 * dlk[iz] * sqrt(te[iz]) + + Kt[nz] = Kt[nz-1] + + return Kt, ustar
    + + +
    +[docs] + @staticmethod + def diffusion_equation(nz, dt, co, da, daz, cd, dz): + + cddz = [0 for i in range(nz + 2)] + a = [[0 for j in range(3)] for i in range(nz)] + c = [0 for i in range(nz)] + + cddz[0] = daz[0] * cd[0] / dz[0] + for iz in range(1, nz): + cddz[iz] = 2. * daz[iz] * cd[iz] / (dz[iz] + dz[iz-1]) + cddz[nz] = daz[nz] * cd[nz] / dz[nz] + + a[0][0] = 0. + a[0][1] = 1. + a[0][2] = 0. + c[0] = co[0] + + for iz in range(1, nz - 1): + dzv = dz[iz] + a[iz][0] = -cddz[iz] * dt / dzv / da[iz] + a[iz][1] = 1 + dt * (cddz[iz] + cddz[iz+1]) / dzv / da[iz] + a[iz][2] = -cddz[iz+1] * dt / dzv / da[iz] + c[iz] = co[iz] + + a[nz-1][0] = -1. + a[nz-1][1] = 1. + a[nz-1][2] = 0. + c[nz-1] = 0. + + return RSMDef.invert(nz, a, c)
    + + +
    +[docs] + @staticmethod + def dissipation_bougeault(g, nz, z, dz, te, pt): + # N.B on translation from UWG_Matlab + # list length (i.e nz) != list indexing (i.e dlu[0] in python + # wherease in matlab it is + + dlu = [0 for x in range(nz)] + dld = [0 for x in range(nz)] + + for iz in range(nz): + zup = 0.0 + dlu[iz] = z[nz] - z[iz] - (dz[iz] / 2.) + zzz = 0.0 + zup_inf = 0.0 + beta = g / pt[iz] + + for izz in range(iz, nz - 1): + dzt = (dz[izz+1] + dz[izz]) / 2. + zup = zup - beta * pt[iz] * dzt + zup = zup + beta * (pt[izz+1] + pt[izz]) * dzt / 2. + zzz = zzz + dzt + + _chkzero = is_near_zero(te[iz] - zup_inf) + if (te[iz] < zup) and ((te[iz] > zup_inf) or _chkzero): + bbb = (pt[izz+1] - pt[izz]) / dzt + + if not is_near_zero(bbb - 0.): + _t1 = ( + sqrt(max(0., (beta * (pt[izz] - pt[iz])) ** 2. + + 2. * bbb * beta * (te[iz] - zup_inf)))) + tl = (-beta * (pt[izz] - pt[iz]) + _t1) / bbb / beta + else: + tl = (te[iz] - zup_inf) / (beta * (pt[izz] - pt[iz])) + dlu[iz] = max(1., zzz - dzt + tl) + zup_inf = zup + + zdo = 0. + zdo_sup = 0. + dld[iz] = z[iz] + dz[iz] / 2. + zzz = 0. + + for izz in range(iz, 0, -1): + dzt = (dz[izz-1] + dz[izz]) / 2. + zdo = zdo + beta * pt[iz] * dzt + zdo = zdo - beta * (pt[izz - 1] + pt[izz]) * dzt / 2. + zzz = zzz + dzt + + _chkzero = is_near_zero(te[iz] - zdo_sup) + if (te[iz] < zdo) and ((te[iz] > zdo_sup) or _chkzero): + + bbb = (pt[izz] - pt[izz-1]) / dzt + + if not is_near_zero(bbb - 0.): + tl = ( + (beta * (pt[izz] - pt[iz]) + + sqrt(max(0., (beta * (pt[izz] - pt[iz])) ** 2. + + 2. * bbb * beta * (te[iz] - zdo_sup)))) / bbb / beta) + else: + tl = (te[iz] - zdo_sup) / (beta * (pt[izz] - pt[iz])) + dld[iz] = max(1., zzz - dzt + tl) + zdo_sup = zdo + + return dlu, dld
    + + +
    +[docs] + @staticmethod + def length_bougeault(nz, dld, dlu, z): + + dlg = [0 for x in range(nz)] + dls = [0 for x in range(nz)] + dlk = [0 for x in range(nz)] + + for iz in range(nz): + dlg[iz] = (z[iz] + z[iz+1]) / 2. + + for iz in range(nz): + dld[iz] = min(dld[iz], dlg[iz]) + dls[iz] = sqrt(dlu[iz] * dld[iz]) + dlk[iz] = min(dlu[iz], dld[iz]) + + return dld, dls, dlk
    + + +
    +[docs] + @staticmethod + def invert(nz, A, C): + """Inversion and resolution of a tridiagonal matrix A X = C. + + nz number of layers + a(*,1) lower diagonal (Ai, i-1) + a(*,2) principal diagonal (Ai, i) + a(*,3) upper diagonal (Ai, i+1) + """ + + X = [0 for i in range(nz)] + + for i in reversed(range(nz - 1)): + C[i] = C[i] - A[i][2] * C[i+1] / A[i+1][1] + A[i][1] = A[i][1] - A[i][2] * A[i+1][0] / A[i+1][1] + + for i in range(1, nz, 1): + C[i] = C[i] - A[i][0] * C[i-1] / A[i-1][1] + + for i in range(nz): + X[i] = C[i] / A[i][1] + + return X
    + + +
    +[docs] + @staticmethod + def load_z_meso(z_meso_path): + """Get list of mesoscale height reference data.""" + + assert os.path.exists(z_meso_path), \ + "File: '{}' does not exist.".format(z_meso_path) + + z_meso = [] + with open(z_meso_path, 'r') as f: + for txtline in f: + # Strip white spaces, change to float + z = float(''.join(txtline.split())) + z_meso.append(z) + + return z_meso
    + + + def __repr__(self): + return 'RSM,\n lat: {}\n lon: {}\n gmt: {}\n height: {}\n z0r: {}\n ' \ + 'disp: {}'.format(self.lat, self.lon, self.gmt, self.height, self.z0r, + self.disp)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/UBLDef.html b/docs/_modules/uwg/UBLDef.html new file mode 100644 index 00000000..f539e5cb --- /dev/null +++ b/docs/_modules/uwg/UBLDef.html @@ -0,0 +1,631 @@ + + + + + + + uwg.UBLDef — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.UBLDef

    +"""Class definition for the Urban Boundary Layer (UBL)."""
    +from __future__ import division
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +import logging
    +from .utilities import is_near_zero
    +
    +
    +
    +[docs] +class UBLDef(object): + """Urban Boundary Layer (UBL) calculations. + + Args: + location: Text string for relative location within a city. Choose from "N", "NE", + "E", "SE", "S", "SW", "W", "NW", or "C". + charLength: Value for characteristic length of the urban area [m]. + initialTemp: Value for initial temperature [K]. + maxdx: Value for maximum discretization length for the UBL model [m]. + dayBLHeight: Value for daytime mixing height [m]. + nightBLHeight: Value for nighttime boundary-layer height [m]. + + Properties: + * location -- relative location within a city (N, NE, E, SE, S, SW, W, NW, C). + * charLength -- characteristic length of the urban area (m) + * perimeter -- horizontal urban area (m2) + * urbArea -- length of the side of the urban area orthogonal + * orthLength -- length to side of urban area orthogonal to wind direction (m) + * paralLength -- length of side of urban area parallel to wind direction (m) + * ublTemp -- urban boundary layer temperature (K) + * ublTempdx -- urban boundary layer temperature discretization (K) + * dayBLHeight -- daytime mixing height, orig = 700 + * nightBLHeight -- nighttime boundary-layer ht (m), Sing: 80, Bub-Cap: 50, orig 80 + """ + + def __init__(self, location, charLength, initialTemp, maxdx, dayBLHeight, + nightBLHeight): + self.location = location + self.charLength = charLength + self.perimeter = 4. * charLength + self.urbArea = charLength ** 2 + self.orthLength = charLength + + numdx = round(charLength / min(charLength, maxdx)) + self.paralLength = charLength / numdx + self.ublTemp = initialTemp + self.ublTempdx = [initialTemp for x in range(int(numdx))] + self.dayBLHeight = dayBLHeight + self.nightBLHeight = nightBLHeight + + # Logger will be disabled by default unless explicitly called in tests + self.logger = logging.getLogger(__name__) + +
    +[docs] + def ublmodel(self, UCM, RSM, rural, forc, parameter, simTime): + # Note that only one urban canyon area is considered + self.sensHeat = UCM.sensHeat + heatDif = max(self.sensHeat - rural.sens, 0) + Cp = parameter.cp # Heat capacity of air (J/kg.K) + k_w = parameter.circCoeff # k_w per Bueno 'the uwg', eq 8 + g = parameter.g # Gravity + v_wind = max(forc.wind, parameter.windMin) # wind velocity + + # Air density + refDens = 0. + for iz in range(RSM.nzref): + refDens = \ + refDens + RSM.densityProfC[iz] * RSM.dz[iz] / \ + (RSM.z[RSM.nzref - 1] + RSM.dz[RSM.nzref - 1] / 2.) + + forDens = 0. + for iz in range(RSM.nzfor): + forDens = \ + forDens + RSM.densityProfC[iz] * RSM.dz[iz] / \ + (RSM.z[RSM.nzfor - 1] + RSM.dz[RSM.nzfor - 1] / 2.) + + # --------------------------------------------------------------------- + # Day + # --------------------------------------------------------------------- + time = simTime.secDay / 3600. + noon = 12. + daylimit = parameter.dayThreshold # sunlight threshold for day (~150W/m^2) + nightlimit = parameter.dayThreshold # sunlight threshold for night (~50W/m^2) + sunlight = forc.dir + forc.dif + + # If dir & dif light is greater than threshold, use day + is_day = (sunlight > daylimit) and (time < noon or is_near_zero(time - noon)) \ + or (sunlight > nightlimit) and (time > noon) or (self.sensHeat > 150.0) + if is_day: + # Circulation velocity per Bueno 'the uwg', eq 8 + self.logger.debug("{} Day ubl calcs".format(__name__)) + h_UBL = self.dayBLHeight # Day boundary layer height + eqTemp = RSM.tempProf[RSM.nzref - 1] + eqWind = RSM.windProf[RSM.nzref - 1] + + Csurf = UCM.Q_ubl * simTime.dt / (h_UBL * refDens * Cp) + u_circ = k_w * (g * heatDif / Cp / refDens / eqTemp * h_UBL) ** (1. / 3.) + + if v_wind > u_circ: # Forced problem (usually this) + advCoef = self.orthLength*eqWind * simTime.dt / self.urbArea * 1.4 + self.ublTemp = (Csurf + advCoef * eqTemp + self.ublTemp) / (1. + advCoef) + self.ublTempdx = [self.ublTemp for x in range(len(self.ublTempdx))] + else: # Convective problem + advCoef = self.perimeter * u_circ * simTime.dt / self.urbArea * 1.4 + self.ublTemp = (Csurf + advCoef * eqTemp + self.ublTemp) / (1 + advCoef) + self.ublTempdx = [self.ublTemp for x in range(len(self.ublTempdx))] + + # --------------------------------------------------------------------- + # Night + # --------------------------------------------------------------------- + else: + self.logger.debug("{} Night ubl calcs".format(__name__)) + h_UBL = self.nightBLHeight # Night boundary layer height + Csurf = UCM.Q_ubl * simTime.dt / (h_UBL * refDens * Cp) + self.ublTemp, self.ublTempdx = \ + UBLDef.nightforc(self.ublTempdx, simTime.dt, h_UBL, self.paralLength, + self.charLength, RSM, Csurf) + + self.logger.debug("ublTemp = {}".format(self.ublTemp))
    + + +
    +[docs] + @staticmethod + def nightforc(ublTempdx, dt, h_UBL, paralLength, charLength, RSM, Csurf): + # Night forcing (RSM.nzfor = number of layers of forcing) + # Average potential temperature & wind speed of the profile + intAdv1 = 0. + for iz in range(RSM.nzfor): + intAdv1 = intAdv1 + RSM.windProf[iz] * RSM.tempProf[iz] * RSM.dz[iz] + + advCoef1 = 1.4 * dt / paralLength / h_UBL * intAdv1 + + intAdv2 = 0 + for iz in range(RSM.nzfor): + intAdv2 = intAdv2 + RSM.windProf[iz] * RSM.dz[iz] + + advCoef2 = 1.4 * dt / paralLength / h_UBL * intAdv2 + + ublTempdx[0] = (Csurf + advCoef1 + ublTempdx[0]) / (1 + advCoef2) + ublTemp = ublTempdx[0] + + for i in range(1, int(charLength) // int(paralLength)): + eqTemp = ublTempdx[i - 1] + ublTempdx[i] = (Csurf + advCoef2*eqTemp + ublTempdx[i]) / (1 + advCoef2) + ublTemp = ublTemp + ublTempdx[i] + + ublTemp = ublTemp / float(charLength) * float(paralLength) + + return ublTemp, ublTempdx
    + + + def __repr__(self): + return 'UBL,\n location: {}\n charLength: {}\n perimeter: {}\n urbArea: {}\n ' \ + 'orthLength: {}\n paralLength: {}\n ublTemp: {}\n dayBLHeight: {}\n ' \ + 'nightBLHeight: {}'.format( + self.location, self.charLength, self.perimeter, self.urbArea, + self.orthLength, self.paralLength, self.ublTemp, self.dayBLHeight, + self.nightBLHeight)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/UCMDef.html b/docs/_modules/uwg/UCMDef.html new file mode 100644 index 00000000..b3b0e5b6 --- /dev/null +++ b/docs/_modules/uwg/UCMDef.html @@ -0,0 +1,766 @@ + + + + + + + uwg.UCMDef — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.UCMDef

    +"""Class for Urban Canopy Model."""
    +from __future__ import division
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +from math import sqrt, pow
    +import copy
    +
    +
    +
    +[docs] +class UCMDef(object): + """Definition of Urban Canopy - Building Energy Model Class + + Args: + bldHeight: Average building height (m). + bldDensity: Horizontal building density (footprint/total_area). + verToHor: Vertical-to-horizontal urban area ratio (facade area/urban area). + treeCoverage: Horizontal tree density (footprint). + sensAnthrop: Sensible anthropogenic heat (other than from buildings) (W m-2). + latAnthrop: Latent anthropogenic heat (other than from buildings) (W m-2). + initialTemp: Canyon air temperature (db) (K). + initialHum: Canyon specific humidity (kg kg-1). + initialWind: Urban canyon wind velocity (m s-1). + parameter: Param object. + r_glaze: Area-weighted average of glazing ratio from urban building stock. + SHGC: Area-weighted average of SHGC from urban building stock. + alb_wall: Area-weighted average of wall albedo from urban building stock. + road: Road element class (moved from BEM). + + Properties + * road -- Road element class (moved from BEM) + * # Urban Canyon Parameters + * bldHeight -- average building height (m) + * bldDensity -- horizontal building density (footprint) + * verToHor -- vertical-to-horizontal urban area ratio (facade area/urban area) + * treeCoverage -- horizontal tree density (footprint) + * sensAnthrop -- sensible anthropogenic heat (other than from buildings) (W m-2) + * latAnthrop -- latent anthropogenic heat (other than from buildings) (W m-2) + * z0u -- urban roughness length (m) + * l_disp -- urban displacement length (m) + * roadShad -- shadowing of roads + * canWidth -- canyon width (m) + * bldWidth -- bld width (m) + * canAspect -- canyon aspect ratio + * roadConf -- road-sky configuration factors (sky view factor) + * alb_wall -- average wall albedo + * wallConf -- wall-sky configuration factors (sky view factor) + * VFwallroad -- wall-road view factor + * VFroadwall -- road-wall view factor + * facArea -- facade area (m2) + * roadArea -- road area (m2) + * roofArea -- roof area (m2) (also building area) + * facAbsor -- average facade absortivity + * roadAbsor -- average road absortivity + * h_mix -- waste heat mix into canyon ratio + * # Urban Canyon Variables + * canTemp -- canyon air temperature (db) (K) + * Tdp -- dew point temperature + * Twb -- wetbulb temperature + * canHum -- canyon specific humidity (kg kg-1) + * canRHum -- canyon relative humidity () + * canWind -- urban canyon wind velocity (m s-1) + * turbU -- canyon turbulent velocities (m s-1) + * turbV -- canyon turbulent velocities (m s-1) + * turbW -- canyon turbulent velocities (m s-1) + * ublTemp -- urban boundary layer temperature (K) + * ublTempdx -- urban boundary layer temperature discretization (K) + * ublWind -- urban boundary layer wind velocity (m s-1) + * ustar -- friction velocity (m s-1) + * ustarMod -- modified friction velocity (m s-1) + * uExch -- exchange velocity (m s-1) + * treeLatHeat -- latent heat from trees (W m-2) + * treeSensHeat -- sensible heat from trees (W m-2) + * sensHeat -- urban sensible heat (W m-2) + * latHeat -- urban latent heat (W m-2) + * windProf -- urban wind profile + * Q_roof -- sensible heat flux from building roof (convective) + * Q_wall -- sensible heat flux from building wall (convective) + * Q_window -- sensible heat flux from building window (via U-factor) + * Q_road -- sensible heat flux from road (convective) + * Q_hvac -- sensible heat flux from HVAC waste + * Q_traffic -- sensible heat flux from traffic (net) + * Q_ubl -- Convective heat exchange with UBL layer + * Q_vent -- Convective heat exchange from ventilation/infiltration + * SolRecWall -- Solar received by wall + * SolRecRoof -- Solar received by roof + * SolRecRoad -- Solar received by road + * roadTemp -- average road temperature (K) + * roofTemp -- average roof temperature (K) + * wallTemp -- average wall temperature (K) + * ElecTotal -- Total Electricity consumption of urban area + * GasTotal -- Total Gas consumption of the urban area + """ + + def __init__(self, bldHeight, bldDensity, verToHor, treeCoverage, sensAnthrop, + latAnthrop, initialTemp, initialHum, initialWind, parameter, + r_glaze, SHGC, alb_wall, road): + + self.road = road + self.bldHeight = bldHeight + self.verToHor = verToHor + self.bldDensity = bldDensity + self.treeCoverage = treeCoverage + self.vegcover = (1 - self.bldDensity) * self.road.vegcoverage + self.sensAnthrop = sensAnthrop + self.latAnthrop = latAnthrop + self.roadShad = min(treeCoverage / (1 - bldDensity), 1) + # UWG_Matlab assumes bld_area = square, so sqrt(bld_area) = side length + # bld width: (side length) derived from bldDensity and verToHor (m) + self.bldWidth = 4 * bldHeight * bldDensity / verToHor + # urban area width == sqrt(bldDensity) == \ + # ratio of bld footprint_width / urban area footprint + d = self.bldWidth / (sqrt(bldDensity)) + # canyon width (m) = urban area width - building width + self.canWidth = d - self.bldWidth + self.canAspect = bldHeight / self.canWidth + self.roadConf = pow(pow(self.canAspect, 2) + 1, 0.5) - self.canAspect + self.wallConf = ( + 0.5 * (self.canAspect + 1 - pow(pow(self.canAspect, 2) + 1, 0.5)) / + self.canAspect) + self.facArea = 4 * self.bldWidth * bldHeight + self.roadArea = d * d - pow(self.bldWidth, 2) + self.roofArea = pow(self.bldWidth, 2) + self.canTemp = initialTemp + self.roadTemp = initialTemp + self.canHum = initialHum + self.ublWind = max(initialWind, parameter.windMin) + self.canWind = initialWind + self.ustar = 0.1 * initialWind + self.ustarMod = 0.1 * initialWind + + # Calculate z0u = urban roughness length (m) + frontDens = verToHor / 4. # density of just street facing facade + if frontDens < 0.15: + self.z0u = frontDens * self.bldHeight + else: + self.z0u = 0.15 * self.bldHeight + + # Calculate l_dsp = urban displacement length (m) + if frontDens < 0.05: + self.l_disp = 3 * frontDens * self.bldHeight + elif frontDens < 0.15: + self.l_disp = (0.15 + 5.5 * (frontDens - 0.05)) * self.bldHeight + elif frontDens < 1: + self.l_disp = (0.7 + 0.35 * (frontDens - 0.15)) * self.bldHeight + else: + self.l_disp = 0.5 * self.bldHeight + + self.alb_wall = alb_wall + self.facAbsor = (1 - r_glaze) * (1 - alb_wall) + r_glaze * (1 - 0.75 * SHGC) + self.roadAbsor = (1 - road.vegcoverage) * (1 - road.albedo) + self.sensHeat = 0.0 + + # Variables set in urbflux function + self.latHeat = None + self.windProf = [] + self.canRHum = None + self.Tdp = None + +
    +[docs] + def UCModel(self, BEM, T_ubl, forc, parameter): + """Calculate the urban canyon temperature per The uwg (2012) Eq. 10.""" + + # air density + dens = \ + forc.pres / (1000 * 0.287042 * self.canTemp * (1. + 1.607858 * self.canHum)) + dens_ubl = forc.pres / (1000 * 0.287042 * T_ubl * (1. + 1.607858 * forc.hum)) + Cp_air = parameter.cp + + self.Q_wall = 0. + self.Q_window = 0. + self.Q_road = 0. + self.Q_hvac = 0. + self.Q_traffic = 0. + self.Q_vent = 0. + self.Q_ubl = 0. + self.ElecTotal = 0. + self.GasTotal = 0. + self.roofTemp = 0. + self.wallTemp = 0. + + # Road to Canyon + T_road = self.road.layerTemp[0] + h_conv = self.road.aeroCond + H1 = T_road * h_conv * self.roadArea # Heat (Sens) from road surface + H2 = h_conv * self.roadArea + + H1 = H1 + T_ubl * self.roadArea * self.uExch * Cp_air * dens_ubl # Heat from UBL + H2 = H2 + self.roadArea * self.uExch * Cp_air * dens_ubl + # W = m2 * W/m2 + Q = (self.roofArea + self.roadArea) * (self.sensAnthrop + self.treeSensHeat) + + # Building energy output to canyon, in terms of absolute (total) values + for j in range(len(BEM)): + # Re-naming variable for readability + building = BEM[j].building + wall = BEM[j].wall + T_indoor = building.indoor_temp + T_wall = wall.layerTemp[0] + R_glazing = building.glazing_ratio + A_wall = (1. - R_glazing) * self.facArea + A_window = R_glazing*self.facArea + U_window = building.u_value + + H1 = H1 + BEM[j].frac*( + T_indoor * A_window * U_window + # window U + T_wall * A_wall * h_conv + # wall conv + (T_indoor * self.roofArea * BEM[j].building.vent * + BEM[j].building.nFloor * Cp_air * dens) + # Vent + (T_indoor * self.roofArea * BEM[j].building.infil * self.bldHeight / + 3600.0 * Cp_air * dens)) # Infil + + H2 = H2 + BEM[j].frac * ( + A_window * U_window + # window U + A_wall * h_conv + # wall conv + (self.roofArea * BEM[j].building.vent * BEM[j].building.nFloor * + Cp_air * dens) + # Vent + (self.roofArea * BEM[j].building.infil * self.bldHeight / 3600.0 * + Cp_air * dens)) # Infil + + Q = Q + BEM[j].frac * ( + self.roofArea * building.sensWaste * self.h_mix + # HVAC waste heat + # heat that didn't make it to inside + A_window * BEM[j].wall.solRec * (1.0 - BEM[j].building.shgc)) + + self.wallTemp = self.wallTemp + BEM[j].frac * T_wall + self.roofTemp = self.roofTemp + BEM[j].frac * BEM[j].roof.layerTemp[0] + self.Q_ubl = (self.Q_ubl + BEM[j].frac * self.bldDensity * + (BEM[j].roof.sens + BEM[j].building.sensWaste * + (1. - self.h_mix))) # Changed by Jiachen Mao in March 2017 + + # Solve for canyon temperature + self.canTemp = (H1 + Q) / H2 + + # Heat flux based per m^2 of urban area + # Sensible heat from road (W/m^2 of urban area) + self.Q_road = h_conv * (T_road - self.canTemp) * (1. - self.bldDensity) + self.Q_ubl = ( + self.Q_ubl + self.uExch * Cp_air * dens * (self.canTemp - T_ubl) * + (1. - self.bldDensity)) + self.Q_wall = h_conv * (self.wallTemp - self.canTemp) * self.verToHor + self.Q_traffic = self.sensAnthrop + + # Building energy output to canyon, per m^2 of urban area + T_can = copy.copy(self.canTemp) + for j in range(len(BEM)): + # ventilation volume per m^2 of building + V_vent = BEM[j].building.vent * BEM[j].building.nFloor + V_infil = BEM[j].building.infil * self.bldHeight / 3600.0 + T_indoor = BEM[j].building.indoor_temp + U_window = BEM[j].building.u_value # Added by Jiachen Mao in 03/17 + R_glazing = BEM[j].building.glazing_ratio # Changed by Jiachen Mao in 03/17 + + self.Q_window = (self.Q_window + BEM[j].frac * self.verToHor * R_glazing * + U_window * (T_indoor - T_can)) + self.Q_window = (self.Q_window + BEM[j].frac * self.verToHor * R_glazing * + BEM[j].wall.solRec * (1. - BEM[j].building.shgc)) + self.Q_vent = (self.Q_vent + BEM[j].frac * self.bldDensity * Cp_air * dens * + (V_vent + V_infil) * (T_indoor - T_can)) + self.Q_hvac = (self.Q_hvac + BEM[j].frac * self.bldDensity * + BEM[j].building.sensWaste * self.h_mix) + + self.Q_roof = self.Q_roof + BEM[j].frac * self.bldDensity * BEM[j].roof.sens + + # Total Electrical & Gas power in MW + self.ElecTotal = \ + self.ElecTotal + BEM[j].fl_area * BEM[j].building.ElecTotal / 1.e6 + self.GasTotal = \ + self.GasTotal + BEM[j].fl_area * BEM[j].building.GasTotal / 1.e6 + + # ------------------------------------------------------------------------------ + # Sensible Heat + # Note 1: In the current uwg code, latent heat from evapotranspiration, stagnant + # water, or anthropogenic sources is not modeled due to the difficulty of + # validation, and lack of reliability of precipitation data from EPW files. + # Note 2: Changed sensHeat to multiply treeSensHeat by treeCoverage fraction. + # Since treeSensHeat calculated in solarcalcs does not multiply sensheat by tree + # fraction. For example, if there were 0 trees, this value should be 0. + # ------------------------------------------------------------------------------ + self.sensHeat = ( + self.Q_wall + self.Q_road + self.Q_vent + self.Q_window + self.Q_hvac + + self.Q_traffic + self.treeSensHeat + self.Q_roof) + + # Error checking + if self.canTemp > 350. or self.canTemp < 200: + raise Exception('Got canyon temperature at {} C. Something obviously went ' + 'wrong (UCMDef.py).'.format(self.canTemp - 273.15))
    + + + def __repr__(self): + return 'UCMDef,\n verToHor: {}\n bldDensity: {}\n bldHeight: {}\n canWidth: ' \ + '{}\n canAspect: {}\n facArea: {}\n roofArea: {}'.format( + self.verToHor, self.bldDensity, self.bldHeight, self.canWidth, + self.canAspect, self.facArea, self.roofArea)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/building.html b/docs/_modules/uwg/building.html new file mode 100644 index 00000000..467c15fa --- /dev/null +++ b/docs/_modules/uwg/building.html @@ -0,0 +1,1076 @@ + + + + + + + uwg.building — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.building

    +"""Class of specified building characteristics."""
    +from __future__ import division
    +
    +from .psychrometrics import psychrometrics, moist_air_density
    +from .utilities import is_near_zero, float_in_range, float_positive
    +
    +try:
    +    str = basestring
    +except NameError:
    +    pass
    +
    +
    +
    +[docs] +class Building(object): + """Specified building characteristics. + + Args: + floor_height: Floor height in meters. + int_heat_night: Nighttime internal sensible heat gain [W/m2]. + int_heat_day: Daytime internal sensible heat gain [W/m2]. + int_heat_frad: Value between 0 and 1 for radiant fraction of internal gains. + int_heat_flat: Value between 0 and 1 for latent fraction of internal gains. + infil: Infiltration rate (ACH). + vent: Ventilation rate (ACH). + glazing_ratio: Value between 0 and 1 for glazing ratio. + u_value: Window U-value including film coefficent [W/(m2-K)]. + shgc: Value between 0 and 1 for window Solar Heat Gain Coefficient (SHGC). + condtype: Text string for cooling condensation system type. Choose from AIR or + WATER. + cop: Coefficient of Performance (COP) of cooling system (nominal). + coolcap: Rated cooling system capacity [W/m2]. + heateff: Heating system capacity. + initial_temp: Initial indoor air temperature [K]. + + Properties: + * floor_height -- floor height (m) + * int_heat -- timestep internal heat gains (W m-2 bld) (sensible only) + * int_heat_night -- nighttime internal heat gains (W m-2 floor) + * int_heat_day -- daytime internal heat gains (W m-2 floor) + * int_heat_frad -- radiant fraction of internal gains + * int_heat_flat -- latent fraction of internal gains + * infil -- Infiltration (ACH) + * vent -- Ventilation (m^3/s/m^2) + * glazing_ratio -- glazing ratio + * u_value -- window U-value (W m-2 K-1) (including film coeff) + * shgc -- window SHGC + * condtype -- cooling condensation system type {'AIR', 'WATER'} + * cop -- COP of the cooling system (nominal) + * cop_adj -- adjusted COP per temperature + * cool_setpoint_day -- daytime indoor cooling set-point (K) + * cool_setpoint_night -- nighttime indoor cooling set-point (K) + * heat_setpoint_day -- daytime indoor heating set-point (K) + * heat_setpoint_night -- nighttime indoor heating set-point (K) + * heat_cap -- rated heating system capacity (W m-2) + * heateff -- heating system efficiency (-) + * canyon_fraction -- fraction of waste heat released to canyon, default = 1 + * msys -- HVAC supply mass flowrate (kg s-1 m-2) + * indoor_temp -- indoor air temperature (K) + * indoor_hum -- indoor specific humidity (kg / kg) + * Twb -- wetbulb temperature + * Tdp -- dew point + * indoorRhum -- indoor relative humidity + * area_floor -- total floor space of the BEM + * FanMax -- max fan flow rate (m^3/s) per DOE + * nFloor -- number of floors + * RadFOcc -- Radiant fraction of occupant + * LatFOcc -- Latent fraction of occupant + * RadFEquip -- Radiant fraction of equipment + * RadFLight -- Radiant fraction of light + * sensCoolDemand -- building sensible cooling demand (W m-2) + * sensHeatDemand -- building sensible heating demand (W m-2) + * copAdj -- adjusted COP per temperature + * dehumDemand -- dehumidification energy (W m-2) + * coolConsump -- cooling energy consumption (W m-2) + * heatConsump -- heating energy consumption (W m-2) + * sensWaste -- sensible waste heat (W m-2) + * latWaste -- lat waste heat (W m-2) + * fluxMass -- mass surface heat flux (W m-2) (mass to indoor air) + * fluxWall -- wall surface heat flux (W m-2) (wall to inside) + * fluxRoof -- roof surface heat flux (W m-2) (roof to inside) + * fluxSolar -- solar heat gain (W m-2) through window (SHGC) + * fluxWindow -- heat gain/loss from window (U-value) + * fluxInterior -- internal heat gain adjusted for latent/LW heat (W m-2) + * fluxInfil -- heat flux from infiltration (W m-2) + * fluxVent -- heat flux from ventilation (W m-2) + * ElecTotal -- total electricity consumption - (W/m^2) of floor + * GasTotal -- total gas consumption - (W/m^2) of floor + * Qhvac -- total heat removed (sensible + latent) + * Qheat -- total heat added (sensible only) + """ + + TEMP_COEF_CONFLICT_MSG = \ + 'FATAL ERROR! Try running a shorter simulation (for a fraction of the year)\n' \ + 'or try increasing the simulation timesteps per hour' + + def __init__(self, floor_height, int_heat_night, int_heat_day, int_heat_frad, + int_heat_flat, infil, vent, glazing_ratio, u_value, shgc, condtype, cop, + coolcap, heateff, initial_temp): + + self.floor_height = floor_height + self.int_heat = int_heat_night + self.int_heat_night = int_heat_night + self.int_heat_day = int_heat_day + self.int_heat_frad = int_heat_frad + self.int_heat_flat = int_heat_flat + self.infil = infil + self.vent = vent + self.glazing_ratio = glazing_ratio + self.u_value = u_value + self.shgc = shgc + self.condtype = condtype + self.cop = cop + self.coolcap = coolcap + self.heateff = heateff + self.initial_temp = initial_temp + self.indoor_temp = initial_temp + self.cop_adj = cop + + # set properties + self.indoor_hum = 0.012 + self.heat_cap = 999 + self.canyon_fraction = 1.0 + self.cool_setpoint_day = 297 # 24 C + self.cool_setpoint_night = 297 # 24 C + self.heat_setpoint_day = 293 # 24 C + self.heat_setpoint_night = 293 # 24 C + self.msys = \ + coolcap / 1004. / (min(self.cool_setpoint_day, self.cool_setpoint_night) - + 14 - 273.15) + + @property + def floor_height(self): + """Get or set floor height in meters.""" + return self._floor_height + + @floor_height.setter + def floor_height(self, value): + self._floor_height = float_positive(value, 'floor_height') + + @property + def int_heat_night(self): + """Get or set nighttime internal sensible heat gain [W/m2].""" + return self._int_heat_night + + @int_heat_night.setter + def int_heat_night(self, value): + self._int_heat_night = float_positive(value, 'int_heat_night') + + @property + def int_heat_frad(self): + """Get or set value between 0 and 1 radiant fraction of internal gains.""" + return self._int_heat_frad + + @int_heat_frad.setter + def int_heat_frad(self, value): + self._int_heat_frad = float_in_range(value, 0, 1, 'int_heat_frad') + + @property + def int_heat_flat(self): + """Get or set value between 0 and 1 for latent fraction of internal gains.""" + return self._int_heat_flat + + @int_heat_flat.setter + def int_heat_flat(self, value): + self._int_heat_flat = float_in_range(value, 0, 1, 'int_heat_flat') + + @property + def infil(self): + """Get or set infiltration rate (ACH).""" + return self._infil + + @infil.setter + def infil(self, value): + self._infil = float_positive(value, 'infil') + + @property + def vent(self): + """Get or set ventilation rate (ACH).""" + return self._vent + + @vent.setter + def vent(self, value): + self._vent = float_positive(value, 'vent') + + @property + def glazing_ratio(self): + """Get or set value between 0 and 1 for glazing ratio.""" + return self._glazing_ratio + + @glazing_ratio.setter + def glazing_ratio(self, value): + self._glazing_ratio = float_in_range(value, 0, 1, 'glazing_ratio') + + @property + def u_value(self): + """Get or set window U-value including film coefficent [W/(m2-K)].""" + return self._u_value + + @u_value.setter + def u_value(self, value): + self._u_value = float_positive(value, 'u_value') + + @property + def shgc(self): + """Get or set building glazing Solar Heat Gain Coefficient.""" + return self._shgc + + @shgc.setter + def shgc(self, value): + self._shgc = float_in_range(value, 0, 1, 'shgc') + + @property + def condtype(self): + """Get or set text string for cooling condensation system type. + + Choose from: + + * "AIR" + * "WATER". + """ + return self._condtype + + @condtype.setter + def condtype(self, value): + value = value.upper() + assert value in ('AIR', 'WATER'), 'condtype must be "AIR" or "WATER". ' \ + 'Got: {}.'.format(value) + self._condtype = value + + @property + def cop(self): + """Get or set the nominal Coefficient of Performance (COP) of cooling system.""" + return self._cop + + @cop.setter + def cop(self, value): + self._cop = float_positive(value, 'cop') + + @property + def coolcap(self): + """Get or set rated cooling system capacity [W/m2].""" + return self._coolcap + + @coolcap.setter + def coolcap(self, value): + self._coolcap = float_positive(value, 'coolcap') + + @property + def heateff(self): + """Get or set heating system capacity.""" + return self._heateff + + @heateff.setter + def heateff(self, value): + self._heateff = float_positive(value, 'heateff') + + @property + def initial_temp(self): + """Get or set initial indoor air temperature [K].""" + return self._initial_temp + + @initial_temp.setter + def initial_temp(self, value): + self._initial_temp = float_positive(value, 'initial_temp') + +
    +[docs] + @classmethod + def from_dict(cls, data): + """Create a Building object from a dictionary. + + Args: + data: A Building dictionary following the format below. + + .. code-block:: python + { + "type": "Building" + "floor_height": self.floor_height, + "int_heat_night": self.int_heat_night, + "int_heat_day": self.int_heat_day, + "int_heat_frad": self.int_heat_frad, + "int_heat_flat": self.int_heat_flat, + "infil": self.infil, + "vent": self.vent, + "glazing_ratio": self.glazing_ratio, + "u_value": self.u_value, + "shgc": self.shgc, + "condtype": self.condtype, + "cop": self.cop, + "coolcap": self.coolcap, + "heateff": self.heateff, + "initial_temp": self.initial_temp + } + """ + assert data['type'] == 'Building', 'Expected ' \ + 'Building dictionary. Got {}.'.format(data['type']) + + return cls(data['floor_height'], data['int_heat_night'], data['int_heat_day'], + data['int_heat_frad'], data['int_heat_flat'], data['infil'], + data['vent'], data['glazing_ratio'], data['u_value'], data['shgc'], + data['condtype'], data['cop'], data['coolcap'], data['heateff'], + data['initial_temp'])
    + + +
    +[docs] + def to_dict(self): + """Building dictionary representation.""" + base = {'type': 'Building'} + base['floor_height'] = self.floor_height + base['int_heat_night'] = self.int_heat_night + base['int_heat_day'] = self.int_heat_day + base['int_heat_frad'] = self.int_heat_frad + base['int_heat_flat'] = self.int_heat_flat + base['infil'] = self.infil + base['vent'] = self.vent + base['glazing_ratio'] = self.glazing_ratio + base['u_value'] = self.u_value + base['shgc'] = self.shgc + base['condtype'] = self.condtype + base['cop'] = self.cop + base['coolcap'] = self.coolcap + base['heateff'] = self.heateff + base['initial_temp'] = self.initial_temp + return base
    + + +
    +[docs] + def BEMCalc(self, UCM, BEM, forc, parameter, simTime): + """Update BEM by a single timestep.""" + + # total electricity consumption - (W/m^2) of floor + self.ElecTotal = 0.0 + self.nFloor = max(UCM.bldHeight / float(self.floor_height), 1) + self.Qheat = 0.0 # total sensible heat added + self.sensCoolDemand = 0.0 # building sensible cooling demand (W m-2) + self.sensHeatDemand = 0.0 # building sensible heating demand (W m-2) + self.coolConsump = 0.0 # cooling energy consumption (W m-2) + self.heatConsump = 0.0 # heating energy consumption (W m-2) + self.sensWaste = 0.0 # Sensible waste heat (W m-2) + self.dehumDemand = 0.0 # dehumidification energy (W m-2) + self.Qhvac = 0.0 # Total heat removed (sensible + latent) + Qdehum = 0.0 + # dens: Moist air density given dry bulb temp, humidity ratio, and pressure + dens = moist_air_density( + forc.pres, self.indoor_temp, self.indoor_hum) # kgv/m3 + evapEff = 1. # evaporation efficiency in the condenser + # total vent volumetric flow [m3 s-1] + volVent = self.vent * self.nFloor + volInfil = self.infil * UCM.bldHeight / \ + 3600. # Change of units AC/H -> [m3 s-1] + T_wall = BEM.wall.layerTemp[-1] # Inner layer + volSWH = BEM.swh * self.nFloor / \ + 3600. # Change of units l/hr per m^2 -> [L/s] + T_ceil = BEM.roof.layerTemp[-1] # Inner layer + T_mass = BEM.mass.layerTemp[0] # Outer layer + T_indoor = self.indoor_temp # Indoor temp (initial) + T_can = UCM.canTemp # Canyon temperature + + # Normalize areas to building foot print [m^2/m^2(bld)] + facArea = UCM.verToHor / UCM.bldDensity # [m2(facade)/m2(bld)] + wallArea = facArea * (1. - self.glazing_ratio) # [m2(wall)/m2(bld)] + winArea = facArea * self.glazing_ratio # [m2(window)/m2(bld)] + massArea = 2 * self.nFloor - 1 # ceiling/floor (top & bottom) + + # Set temperature set points according to night/day setpoints in building + # schedule & simTime hr + isEqualNightStart = \ + is_near_zero((simTime.secDay / 3600.) - parameter.nightSetStart) + if (simTime.secDay / 3600. < parameter.nightSetEnd) or \ + (simTime.secDay / 3600. > parameter.nightSetStart or isEqualNightStart): + T_cool = self.cool_setpoint_night + T_heat = self.heat_setpoint_night + self.int_heat = self.int_heat_night * self.nFloor + else: + T_cool = self.cool_setpoint_day + T_heat = self.heat_setpoint_day + self.int_heat = self.int_heat_day * self.nFloor + + # Indoor convection heat transfer coefficients + zac_in_wall = 3.076 # wall heat convection coefficient + zac_in_mass = 3.076 # mass heat convection coefficient + + # Check that T_ceil and T_indoor within reasonable bounds + converge_hi = 100.0 + 273.15 + converge_lo = -50.0 + 273.15 + + try: + chk_tin = converge_lo <= T_indoor <= converge_hi + chk_tce = converge_lo <= T_ceil <= converge_hi + + if chk_tin is not True or chk_tce is not True: + raise Exception( + "{}.\n Error at {}/{} {}s\nT_INDOOR: {}C\nT_CEILING: {}C\n{}.".format( + self.TEMP_COEF_CONFLICT_MSG, + simTime.month, simTime.day, simTime.secDay, + T_indoor, T_ceil, BEM)) + + except ValueError: + raise Exception("{}.\n Error at {}/{} {}s\n{}".format( + self.TEMP_COEF_CONFLICT_MSG, simTime.month, simTime.day, + simTime.secDay, BEM)) + + # If temperature is reasonable assign coefficients + if T_ceil > T_indoor: + # set higher ceiling heat convection coefficient + # based on heat is higher on ceiling + zac_in_ceil = 0.948 + else: + zac_in_ceil = 4.040 + + # ------------------------------------------------------------- + # Heat fluxes (per m^2 of bld footprint) + # ------------------------------------------------------------- + # Solar Heat Gain: solar radiation received (W m-2) * area * SHGC + winTrans = BEM.wall.solRec * self.shgc * winArea + + # Latent heat infiltration & ventilation (W/m^2 of bld footprint) from + # volInfil/volVent: [m3 s-1 m-2 (bld/facade#)] + # parameter.lv: latent heat of evaporation [J kgv-1] + # dens: kga m-3 + # UCM.canHum: canyon specific humidity (kgv kga-1) + # indoorHum: indoor kv kga-1 + # QL = W m-2 + + QLinfil = volInfil * dens * parameter.lv * \ + (UCM.canHum - self.indoor_hum) + QLvent = volVent * dens * parameter.lv * (UCM.canHum - self.indoor_hum) + # QLintload (Qlatent Internal load): timestep int gain * int gain latent frac + QLintload = self.int_heat * self.int_heat_flat + + # Heat/Cooling load (W/m^2 of bld footprint), if any + self.sensCoolDemand = max( + wallArea * zac_in_wall * (T_wall - T_cool) + # wall load + massArea * zac_in_mass * (T_mass-T_cool) + # mass load + # window load due to temp delta + winArea * self.u_value * (T_can - T_cool) + + zac_in_ceil * (T_ceil-T_cool) + # ceiling load + self.int_heat + # internal load + volInfil * dens * parameter.cp * (T_can - T_cool) + # m3 s-1 + volVent * dens * parameter.cp * (T_can-T_cool) + # m3 s-1 + winTrans, # solar load through window + 0.) + + self.sensHeatDemand = max( + -(wallArea * zac_in_wall * (T_wall-T_heat) + # wall load + massArea * zac_in_mass * (T_mass-T_heat) + # mass load + winArea * self.u_value * (T_can - T_heat) + # window load + zac_in_ceil * (T_ceil-T_heat) + # ceiling load + self.int_heat + # internal load + volInfil * dens * parameter.cp * (T_can-T_heat) + # m3 s-1 + volVent * dens * parameter.cp * (T_can-T_heat) + # m3 s-1 + winTrans), # solar load through window + 0.) + + # ------------------------------------------------------------- + # HVAC system (cooling demand = W/m^2 bld footprint) + # ------------------------------------------------------------- + if self.sensCoolDemand > 0. and UCM.canTemp > 288.: + # Cooling energy is the equivalent energy to bring a vol + # where sensCoolDemand = dens * Cp * x * (T_indoor - 10C) & + # given 7.8g/kg of air at 10C, assume 7g/kg of air + # dehumDemand = x * dens * (self.indoorHum - + # 0.9*0.0078)*parameter.lv + VolCool = self.sensCoolDemand / \ + (dens * parameter.cp * (T_indoor - 283.15)) + self.dehumDemand = \ + max(VolCool * dens * (self.indoor_hum - + 0.9 * 0.0078) * parameter.lv, 0.) + if (self.dehumDemand + self.sensCoolDemand) > (self.coolcap * self.nFloor): + # if cooling demand greater then hvac cooling capacity + self.Qhvac = self.coolcap * self.nFloor + VolCool = ( + VolCool / (self.dehumDemand + self.sensCoolDemand) * + (self.coolcap * self.nFloor)) + self.sensCoolDemand = ( + self.sensCoolDemand * (self.coolcap * self.nFloor) / + (self.dehumDemand + self.sensCoolDemand)) + self.dehumDemand = ( + self.dehumDemand * (self.coolcap * self.nFloor) / + (self.dehumDemand + self.sensCoolDemand)) + else: + self.Qhvac = self.dehumDemand + self.sensCoolDemand + + Qdehum = VolCool * dens * parameter.lv * \ + (self.indoor_hum - 0.9 * 0.0078) + self.coolConsump = \ + (max(self.sensCoolDemand + self.dehumDemand, 0.0)) / self.cop_adj + + # Waste heat from HVAC (per m^2 building foot print) + if self.condtype == 'AIR': + self.sensWaste = \ + max(self.sensCoolDemand + self.dehumDemand, 0) + \ + self.coolConsump + self.latWaste = 0.0 + elif self.condtype == 'WATER': # Not sure if this works well + self.sensWaste = ( + max(self.sensCoolDemand + self.dehumDemand, 0) + self.coolConsump * + (1. - evapEff)) + self.latWaste = ( + max(self.sensCoolDemand + self.dehumDemand, 0) + self.coolConsump * + evapEff) + self.sensHeatDemand = 0. + + # ------------------------------------------------------------- + # HVAC system (heating demand = W/m^2 bld footprint) + # ------------------------------------------------------------- + elif self.sensHeatDemand > 0. and UCM.canTemp < 288.: + # limit on heating capacity + self.Qheat = min(self.sensHeatDemand, self.heat_cap * self.nFloor) + + self.heatConsump = self.Qheat / self.heateff + self.sensWaste = self.heatConsump - self.Qheat # waste per footprint + self.heatConsump = self.heatConsump / self.nFloor # adjust to per flr area + self.sensHeatDemand = self.Qheat / self.nFloor # adjust to per flr area + Qdehum = 0.0 + self.sensCoolDemand = 0.0 + + # ------------------------------------------------------------- + # Evolution of the internal temperature and humidity + # ------------------------------------------------------------- + # wall, mass, roof, intload, infil, vent, hvac, heat, window + + Q = self.int_heat + winTrans + self.Qheat - self.sensCoolDemand + + H1 = (T_wall * wallArea * zac_in_wall + + T_mass * massArea * zac_in_mass + + T_ceil * zac_in_ceil + + T_can * winArea * self.u_value + + T_can * volInfil * dens * parameter.cp + + T_can * volVent * dens * parameter.cp) + + H2 = (wallArea * zac_in_wall + + massArea * zac_in_mass + + zac_in_ceil + + winArea * self.u_value + + volInfil * dens * parameter.cp + + volVent * dens * parameter.cp) + + # Assumes air temp of control volume is sum of surface boundary temps + # weighted by area and heat transfer coefficient + generated heat + self.indoor_temp = (H1 + Q) / H2 + + self.indoor_hum = ( + self.indoor_hum + (simTime.dt / (dens * parameter.lv * UCM.bldHeight)) * + (QLintload + QLinfil + QLvent - Qdehum)) + + # Calculate relative hum (Pw/Pws*100) using pressurce, indoor temp, hum + _Tdb, _w, _phi, _h, _Tdp, _v = \ + psychrometrics(self.indoor_temp, self.indoor_hum, forc.pres) + self.indoorRhum = _phi + + # These are used for element calculation (per m^2 of element area) + self.fluxWall = zac_in_wall * (T_indoor - T_wall) + self.fluxRoof = zac_in_ceil * (T_indoor - T_ceil) + self.fluxMass = ( + zac_in_mass * (T_indoor - T_mass) + self.int_heat * self.int_heat_f_rad / + massArea) + + # These are for record keeping only, per m^2 of floor area (W m-2) + self.fluxSolar = winTrans / self.nFloor + self.fluxWindow = winArea * self.u_value * \ + (T_can - T_indoor) / self.nFloor + self.fluxInterior = \ + self.int_heat * self.int_heat_f_rad * \ + (1. - self.int_heat_flat) / self.nFloor + # volInfil: m3/s + self.fluxInfil = \ + volInfil * dens * parameter.cp * (T_can - T_indoor) / self.nFloor + # volVent: m3/s + self.fluxVent = volVent * dens * parameter.cp * \ + (T_can - T_indoor) / self.nFloor + self.coolConsump = self.coolConsump / self.nFloor + self.sensCoolDemand = self.sensCoolDemand / self.nFloor + + # Total Electricity/building floor area (W/m^2) + self.ElecTotal = self.coolConsump + BEM.elec + BEM.light + + # Waste heat to canyon, W/m^2 of building + water + CpH20 = 4200. # specific heat capacity of water J/(kg-C) + T_hot = 49 + 273.15 # Service water temp (assume no storage) + # N.B No L to kg conversion for water in this equation because + # 1 L of water = 1 kg of water. + self.sensWaste = ( + self.sensWaste + (1 / self.heateff - 1.) * + (volSWH * CpH20 * (T_hot - forc.waterTemp)) + BEM.gas * + (1 - self.heateff) * self.nFloor) + + # Gas equip per floor + water usage per floor + heating/floor + self.GasTotal = ( + BEM.gas + volSWH * CpH20 * (T_hot - forc.waterTemp) / self.nFloor / + self.heateff + self.heatConsump)
    + + + def __repr__(self): + return 'Building,\n floor_height: {}\n int_heat_night {}\n int_heat_day {}\n ' \ + 'int_heat_frad {}\n int_heat_flat {}\n infil: {}\n vent: {}\n ' \ + 'glazing_ratio: {}\n u_value: {}\n shgc: {}\n condtype: {}\n cop: {}\n ' \ + 'cool_setpoint_day: {}\n cool_setpoint_night: {}\n heat_setpoint_day: {}\n' \ + 'heat_setpoint_night: {}\n coolcap: {}\n heateff: {}\n ' \ + 'initial_temp: {}'.format( + self.floor_height, self.int_heat_night, self.int_heat_day, + self.int_heat_frad, self.int_heat_flat, self.infil, self.vent, + self.glazing_ratio, self.u_value, self.shgc, self.condtype, + self.cop, self.cool_setpoint_day, self.cool_setpoint_night, + self.heat_setpoint_day, self.heat_setpoint_night, + self.coolcap, self.heateff, self.initial_temp)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/element.html b/docs/_modules/uwg/element.html new file mode 100644 index 00000000..5905b7f6 --- /dev/null +++ b/docs/_modules/uwg/element.html @@ -0,0 +1,938 @@ + + + + + + + uwg.element — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.element

    +"""Element class."""
    +from __future__ import division
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +import math
    +from .utilities import is_near_zero, float_in_range, float_positive
    +from .material import Material
    +
    +try:
    +    str = basestring
    +except NameError:
    +    pass
    +
    +
    +
    +[docs] +class Element(object): + """Element object defines wall, and roof constructions. + + Args: + albedo: Number for outer surface albedo. + emissivity: Number for outer surface emissivity. + layer_thickness_lst: List of layer thickness in meters. + material_lst: List of Material objects in Element. + vegcoverage: Number for fraction of surface vegetation coverage. + t_init: Element initial temperature [K]. + horizontal: Boolean indicating if Element is horizontal or not (vertical). + name: Text string for name of Element. + + Properties: + * albedo -- outer surface albedo + * emissivity -- outer surface emissivity. + * layer_thickness_lst -- list of layer thickness [m] + * material_lst -- material objects in Element. + * layerThermalCond -- vector of layer thermal conductivities [W m-1 K-1] + * layerVolHeat -- vector of layer volumetric heat [J m-3 K-1] + * vegcoverage -- surface grass coverage + * t_init -- element initial temperature [K]. + * layerTemp -- vector of layer temperatures [K] + * waterStorage -- thickness of water film [m] for horizontal surfaces only + * horizontal -- 1-horizontal, 0-vertical + * solRec -- solar radiation received [W m-2] + * infra -- net longwave radiation [W m-2] + * lat -- surface latent heat flux [W m-2] + * sens -- surface sensible heat flux [W m-2] + * solAbs -- solar radiation absorbed [W m-2] + * aeroCond -- convective heat transfer coefficient [-] + * T_ext -- external surface temperature [K] + * T_int -- internal surface temperature [K] + * flux -- external surface heat flux [W m-2] + """ + + def __init__(self, albedo, emissivity, layer_thickness_lst, material_lst, + vegcoverage, t_init, horizontal, name): + + assert len(layer_thickness_lst) == len(material_lst), 'The number of layer ' \ + 'thickness must match the number of layer materials. Got {} and {}, ' \ + 'respectively.'.format(len(layer_thickness_lst), len(material_lst)) + + self.albedo = albedo # + self.emissivity = emissivity # outer surface emissivity. + # list of layer thickness [m] + self.layer_thickness_lst = layer_thickness_lst + self.material_lst = material_lst # + self.vegcoverage = vegcoverage # + self.t_init = t_init # + self.horizontal = int(horizontal) # + self._name = name + + # layerThermaCond: + self.layerThermalCond = [ + material.thermalcond for material in material_lst] + # layerVolHeat: + self.layerVolHeat = [material.volheat for material in material_lst] + # layerTemp: # + self.layerTemp = [t_init] * len(layer_thickness_lst) + # waterStorage: # + self.waterStorage = 0 + self.infra = 0 # + self.sens = 0 # + self.solRec = 0 # + self.lat = 0 # + self.solAbs = 0 # + self.aeroCond = 0 # + self.T_ext = 293 # + self.T_int = 293 # + self.flux = 0 # + + @property + def albedo(self): + """Get or set a value between 0 and 1 for outer surface albedo.""" + return self._albedo + + @albedo.setter + def albedo(self, value): + self._albedo = float_positive(value, 'albedo') + + @property + def emissivity(self): + """Get or set a value between 0 and 1 for outer surface emissivity.""" + return self._emissivity + + @emissivity.setter + def emissivity(self, value): + self._emissivity = float_positive(value, 'emissivity') + + @property + def layer_thickness_lst(self): + """Get or set list of thickness in meters of each Material in Element. + + The order of thickness should correspond to the order of the Material objects in + material_lst. + """ + return self._layer_thickness_lst + + @layer_thickness_lst.setter + def layer_thickness_lst(self, value): + assert all(v > 0 for v in value), 'Every value in layer_thickness_lst ' + 'must be greater than 0.' + self._layer_thickness_lst = value + + @property + def material_lst(self): + """Get or set list of Material objects in the element. + + The order of Material objects should correspond to the order of the thickness in + layer_thickness_lst. + """ + return self._material_lst + + @material_lst.setter + def material_lst(self, value): + assert all(isinstance(v, Material) for v in value), 'Every item in ' + 'in material_lst must be a Material object.' + self._material_lst = value + + @property + def vegcoverage(self): + """Get or set fraction of vegetation coverage on Element.""" + return self._vegcoverage + + @vegcoverage.setter + def vegcoverage(self, value): + self._vegcoverage = float_in_range(value, 0, 1, 'vegcoverage') + + @property + def t_init(self): + """Get or set initial temperature of Element [K].""" + return self._t_init + + @t_init.setter + def t_init(self, value): + self._t_init = float_in_range(value, mi=0, input_name='t_init') + + @property + def horizontal(self): + """Get or set boolean value indicating if Element is horizontal or not.""" + return self._horizontal + + @horizontal.setter + def horizontal(self, value): + self._horizontal = bool(value) + + @property + def name(self): + """Get or set text string for name of Element.""" + return self._name + +
    +[docs] + @classmethod + def from_dict(cls, data): + """Create a Element object from a dictionary. + + Args: + data: A Element dictionary following the format below. + + .. code-block:: python + + { + "albedo": 0.08, + "emissivity": 0.92, + "layer_thickness_lst": [0.0254, 0.0508, 0.0254], + "material_lst": material_dict_lst, # List of material dictionaries + "vegcoverage": 0.5, + "t_init": 293, + "horizontal": False, + "name": MassWall + } + """ + assert data['type'] == 'Element', 'Expected ' \ + 'Element dictionary. Got {}.'.format(data['type']) + + materials = [Material.from_dict(m) for m in data['material_lst']] + return cls(data['albedo'], data['emissivity'], data['layer_thickness_lst'], + materials, data['vegcoverage'], data['t_init'], + data['horizontal'], data['name'])
    + + +
    +[docs] + def to_dict(self): + """Element dictionary representation.""" + base = {'type': 'Element'} + base['albedo'] = self.albedo + base['emissivity'] = self.emissivity + base['layer_thickness_lst'] = self.layer_thickness_lst + base['material_lst'] = [m.to_dict() for m in self.material_lst] + base['vegcoverage'] = self.vegcoverage + base['t_init'] = self.t_init + base['horizontal'] = self.horizontal + base['name'] = self.name + return base
    + + +
    +[docs] + def SurfFlux(self, forc, parameter, simTime, humRef, tempRef, windRef, boundCond, + intFlux): + """Calculate net heat flux, and update element layer temperatures.""" + + # Calculated per unit area [m^2] + + # dens: air density (kgd m-3) + dens = forc.pres / (1000 * 0.287042 * tempRef * + (1. + 1.607858 * humRef)) + # convection coef (ref: uwg, eq. 12)) + self.aeroCond = 5.8 + 3.7 * windRef + + if self.horizontal: + # For roof, mass, road + if not is_near_zero(self.waterStorage) and self.waterStorage > 0.0: + # Evaporation [m s-1], Film water & soil latent heat + # Note: in the current uwg code, latent heat from evapotranspiration, + # stagnant water, or anthropogenic sources is not modelled due to the + # difficulty of validation, and lack of reliability of precipitation + # data from EPW files.Therefore this condition is never run because all + # elements have had their waterStorage hardcoded to 0. + qtsat = self.qsat([self.layerTemp[0]], [ + forc.pres], parameter)[0] + eg = self.aeroCond * parameter.colburn * dens * \ + (qtsat - humRef) / parameter.waterDens / parameter.cp + self.waterStorage = \ + min(self.waterStorage + simTime.dt * (forc.prec - eg), + parameter.wgmax) + self.waterStorage = max(self.waterStorage, 0.) # [m] + else: + eg = 0. + soilLat = eg * parameter.waterDens * parameter.lv + + if simTime.month < parameter.vegStart and simTime.month > parameter.vegEnd: + # Winter, no veg + self.solAbs = (1.0 - self.albedo) * self.solRec # (W m-2) + vegLat = 0. + vegSen = 0. + else: + # Summer, veg + self.solAbs = ( + ((1.0 - self.vegcoverage) * (1. - self.albedo) + self.vegcoverage * + (1.0 - parameter.vegAlbedo)) * self.solRec) + try: + # if road compute grass/tree fractions seperately + vegLat = ( + self.grasscoverage * (1.0 - parameter.vegAlbedo) * + parameter.grassFLat * self.solRec) + vegLat += ( + self.treecoverage * (1.0 - parameter.vegAlbedo) * + parameter.treeFLat * self.solRec) + vegSen = ( + self.grasscoverage * (1.0 - parameter.vegAlbedo) * + (1.0 - parameter.grassFLat) * self.solRec) + vegSen += ( + self.treecoverage * (1.0 - parameter.vegAlbedo) * + (1.0 - parameter.treeFLat) * self.solRec) + except AttributeError: + # for all other Elements use veg fraction w/ grassFLat + vegLat = ( + self.vegcoverage * (1.0 - parameter.vegAlbedo) * + parameter.grassFLat * self.solRec) + vegSen = ( + self.vegcoverage * (1.0 - parameter.vegAlbedo) * + (1.0 - parameter.grassFLat) * self.solRec) + + self.lat = soilLat + vegLat + + # Sensible & net heat flux + self.sens = vegSen + self.aeroCond * (self.layerTemp[0] - tempRef) + self.flux = self.solAbs + self.infra - \ + self.lat - self.sens # [W m-2] + + else: + # For vertical surfaces (wall) + self.solAbs = (1.0 - self.albedo) * self.solRec + self.lat = 0.0 + + # Sensible & net heat flux + self.sens = self.aeroCond * (self.layerTemp[0] - tempRef) + self.flux = self.solAbs + self.infra - \ + self.lat - self.sens # [W m-2] + + self.layerTemp = \ + self.Conduction(simTime.dt, self.flux, boundCond, + forc.deepTemp, intFlux) + self.T_ext = self.layerTemp[0] + self.T_int = self.layerTemp[-1]
    + + +
    +[docs] + def Conduction(self, dt, flx1, bc, temp2, flx2): + """Solve the conductance of heat based on of the element layers. + + Args: + dt: Simulation time step in seconds. + flx1: Net heat flux on surface [W m-2] + bc: Boundary condition parameter (1 or 2) + temp2: Deep soil temperature (ave of air temperature) [K] + flx2: Surface flux (sum of absorbed, emitted, etc.) [W m-2] + + Returns: + A 1d vector of element layer temperatures. + """ + t = self.layerTemp # vector of layer temperatures (K) + # vector of layer volumetric heat (J m-3 K-1) + hc = self.layerVolHeat + # vector of layer thermal conductivities (W m-1 K-1) + tc = self.layerThermalCond + d = self.layer_thickness_lst # vector of layer thicknesses (m) + + fimp = 0.5 # implicit coefficient + fexp = 0.5 # explicit coefficient + num = len(t) # number of layers + + # Mean thermal conductivity over distance between 2 layers (W/mK) + tcp = [0 for x in range(num)] + # Thermal capacity times layer depth (J/m2K) + hcp = [0 for x in range(num)] + # lower, main, and upper diagonals + za = [[0 for y in range(3)] for x in range(num)] + # RHS + zy = [0 for x in range(num)] + + # -------------------------------------------------------------------------- + # Define the column vectors for heat capactiy and conductivity + hcp[0] = hc[0] * d[0] + for j in range(1, num): + tcp[j] = 2. / (d[j-1] / tc[j-1] + d[j] / tc[j]) + hcp[j] = hc[j] * d[j] + + # -------------------------------------------------------------------------- + # Define the first row of za matrix, and RHS column vector + za[0][0] = 0. + za[0][1] = hcp[0] / dt + fimp * tcp[1] + za[0][2] = -fimp * tcp[1] + zy[0] = hcp[0] / dt*t[0] - fexp * tcp[1] * (t[0] - t[1]) + flx1 + + # -------------------------------------------------------------------------- + # Define other rows + for j in range(1, num - 1): + za[j][0] = fimp * (-tcp[j]) + za[j][1] = hcp[j] / dt + fimp * (tcp[j] + tcp[j+1]) + za[j][2] = fimp * (-tcp[j+1]) + zy[j] = hcp[j] / dt * t[j] + fexp * \ + (tcp[j] * t[j - 1] - tcp[j] * t[j] - + tcp[j+1] * t[j] + tcp[j+1] * t[j+1]) + + # -------------------------------------------------------------------------- + # Boundary conditions + if is_near_zero(bc - 1.0): + # heat flux + za[num-1][0] = fimp * (-tcp[num-1]) + za[num-1][1] = hcp[num-1] / dt + fimp * tcp[num-1] + za[num-1][2] = 0. + zy[num-1] = hcp[num-1] / dt * t[num-1] + fexp * tcp[num-1] * \ + (t[num-2] - t[num-1]) + flx2 + elif is_near_zero(bc - 2.0): + # deep-temperature + za[num-1][0] = 0. + za[num-1][1] = 1. + za[num-1][2] = 0. + zy[num-1] = temp2 + else: + raise Exception('Error during conduction calculation. Check input ' + 'parameters in the Conduction routine.') + + # -------------------------------------------------------------------------- + zx = Element.invert(num, za, zy) + # t(:) = zx(:) + return zx # return zx as 1d vector of templayers
    + + +
    +[docs] + def qsat(self, temp, pres, parameter): + """Calculate vector of saturation humidity from air pressure and layer temperatures. + + Args: + temp: List of layer temperatures [K]. + pres: Pressure (at current timestep) [Pa]. + parameter: Parameter object with geographic parameters. + + Returns: + List of saturation humidity values. + """ + gamw = (parameter.cl - parameter.cpv) / parameter.rv + betaw = (parameter.lvtt / parameter.rv) + (gamw * parameter.tt) + alpw = math.log(parameter.estt) + (betaw / parameter.tt) + \ + (gamw * math.log(parameter.tt)) + work2 = parameter.r / parameter.rv + foes_lst = [0 for i in range(len(temp))] + work1_lst = [0 for i in range(len(temp))] + qsat_lst = [0 for i in range(len(temp))] + + for i in range(len(temp)): + # saturation vapor pressure + foes_lst[i] = math.exp( + alpw - (betaw / temp[i]) - (gamw * math.log(temp[i]))) + work1_lst[i] = foes_lst[i] / pres[i] + # saturation humidity + qsat_lst[i] = work2 * work1_lst[i] / \ + (1. + ((work2 - 1.) * work1_lst[i])) + + return qsat_lst
    + + +
    +[docs] + @staticmethod + def invert(nz, A, C): + """Invert and solve tridiagonal matrix. + + Given A * X = C, solves for X, where + a(*, 1) lower diagonal (Ai, i-1) + a(*, 2) principal diagonal (Ai, i) + a(*, 3) upper diagonal (Ai, i+1) + + Args: + nz: number of layers. + A: A matrix to invert. + C: Result from A * X + + Returns: + Solved matrix X from matrix inversion. + """ + + X = [0 for i in range(nz)] + + for i in reversed(range(nz-1)): + C[i] = C[i] - A[i][2] * C[i+1] / A[i+1][1] + A[i][1] = A[i][1] - A[i][2] * A[i+1][0] / A[i+1][1] + + for i in range(1, nz, 1): + C[i] = C[i] - A[i][0] * C[i-1] / A[i-1][1] + + for i in range(nz): + X[i] = C[i] / A[i][1] + + return X
    + + + def __repr__(self): + rval = round(sum([1.0 / t for t in self.layerThermalCond]), 2) + return 'Element,\n name: {}\n emissivity: {}\n albedo: {}\n R value: ' \ + '{}\n vegcoverage: {}\n horizontal: {}\n layer_thickness_lst: {}\n ' \ + 'layerTemp: {}'.format( + self.name, self.emissivity, self.albedo, rval, self.vegcoverage, + bool(self.horizontal), self.layer_thickness_lst, self.layerTemp)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/forcing.html b/docs/_modules/uwg/forcing.html new file mode 100644 index 00000000..a1aaacb9 --- /dev/null +++ b/docs/_modules/uwg/forcing.html @@ -0,0 +1,531 @@ + + + + + + + uwg.forcing — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.forcing

    +"""Class to estimate deep ground/water temperature."""
    +from __future__ import division
    +
    +
    +
    +[docs] +class Forcing (object): + """Force method to estimate deep ground/water temperature. + + Args: + staTemp: List of hourly air temperature for simulation period. + weather: Weather object. + + Properties: + * deepTemp -- deep soil temperature (K) + * waterTemp -- ground water temp, set to temp at 2m + * infra -- horizontal Infrared Radiation Intensity (W m-2) + * uDir -- wind direction + * hum -- specific humidty (kg kg-1) + * pres -- Pressure (Pa) + * temp -- air temperature (C) + * rHum -- Relative humidity (%) + * dir -- normal solar direct radiation (W m-2) + * dif -- horizontal solar diffuse radiation (W m-2) + * prec -- precipitation (mm h-1) + * wind -- wind speed (m s-1) + """ + + def __init__(self, staTemp=None, weather=None): + + if not (staTemp and weather): + # Define default values for instance variables + self.deepTemp = None + self.waterTemp = None + self.infra = None + self.uDir = None + self.hum = None + self.pres = None + self.temp = None + self.rHum = None + self.dir = None + # dif: horizontal solar diffuse radiation (W m-2) + # ...Amount of solar radiation received from the sky + # ...(excluding the solar disk) on a horizontal surface + self.dif = None + self.prec = None + self.wind = None + else: + self.deepTemp = sum(staTemp) / float(len(staTemp)) + self.waterTemp = sum(staTemp) / float(len(staTemp)) + self.infra = weather.staInfra + self.uDir = weather.staUdir + self.hum = weather.staHum + self.pres = weather.staPres + self.temp = weather.staTemp + self.rHum = weather.staRhum + self.dir = weather.staDir + self.dif = weather.staDif + self.prec = [p / 3.6e6 for p in weather.staRobs] + self.wind = weather.staUmod + + def __repr__(self): + return 'forcing,\n deepTemp: {}\n waterTemp: {}'.format( + self.deepTemp, self.waterTemp)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/infracalcs.html b/docs/_modules/uwg/infracalcs.html new file mode 100644 index 00000000..fcb03db8 --- /dev/null +++ b/docs/_modules/uwg/infracalcs.html @@ -0,0 +1,514 @@ + + + + + + + uwg.infracalcs — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.infracalcs

    +"""Functions for calculating canyon infrared radiation."""
    +
    +SIGMA = 5.67e-8  # Stephen-Boltzman const
    +
    +
    +
    +[docs] +def infracalcs(UCM, forc, e_road, e_wall, T_road, T_wall): + """Calculate infrared radiation surface flux on canyon wall and road. + + Args: + UCM: UCMDef object. + forc: Forcing object. + e_road: Number for road emissivity. + e_wall: Number for wall emissivity. + T_road: Number for road surface temperature (K). + T_wall: Number for wall surface temperature (K). + + Returns: + Tuple of two values + + - infra_road: Road infrared radiation (W) + + - infra_wall: Wall infrared radiation (W) + """ + # road_wall_conf: configuration factor (view factor) for road to wall + road_wall_conf = (1. - UCM.roadConf) + # wall_road_conf: wall to road VF same as wall-sky configuration factors + # (sky view factor) + wall_road_conf = UCM.wallConf + + # Calculate radiation of unshaded road, accounting for radiation exchange from wall + _road_rad = \ + e_road * UCM.roadConf * (1. - UCM.roadShad) * (forc.infra - SIGMA * T_road ** 4.) + _wall_to_road_rad = \ + (1. - UCM.roadShad) * e_wall * e_road * SIGMA * road_wall_conf * (T_wall ** 4. - T_road ** 4.) + + infra_road = _road_rad + _wall_to_road_rad + + # Calculate radiation of wall, accounting for radiation exchange from unshaded road + _road_rad = e_wall * UCM.wallConf * (forc.infra - SIGMA * T_wall ** 4.) + _road_to_wall_rad = \ + (1. - UCM.roadShad) * e_wall * e_road * SIGMA * wall_road_conf * (T_road ** 4. - T_wall ** 4.) + + infra_wall = _road_rad + _road_to_wall_rad + + return infra_road, infra_wall
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/material.html b/docs/_modules/uwg/material.html new file mode 100644 index 00000000..04992e48 --- /dev/null +++ b/docs/_modules/uwg/material.html @@ -0,0 +1,560 @@ + + + + + + + uwg.material — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.material

    +"""Material class"""
    +
    +from .utilities import float_in_range_excl_incl
    +
    +try:
    +    str = basestring
    +except NameError:
    +    pass
    +
    +
    +
    +[docs] +class Material(object): + """Material class. + + Args: + thermalcond: Number for thermal conductivity [W m-1 K-1]. + volheat: Number for volumetric heat capacity [J m-3 K-1]. + name: Text string for name of the Material. + + Properties: + * thermalcond + * volheat + """ + + def __init__(self, thermalcond, volheat, name): + self._name = name + self.thermalcond = thermalcond + self.volheat = volheat + + @property + def name(self): + """Get or set text string for name of Material.""" + return self._name + + @property + def thermalcond(self): + """Get or set number for thermal conductivity [W/(m-K)].""" + return self._thermalcond + + @thermalcond.setter + def thermalcond(self, value): + self._thermalcond = \ + float_in_range_excl_incl(value, mi=0, input_name='thermalcond') + + @property + def volheat(self): + """Get or set number for volumetric capacity [J/(m3-K)].""" + return self._volheat + + @volheat.setter + def volheat(self, value): + self._volheat = float_in_range_excl_incl( + value, mi=0, input_name='volheat') + +
    +[docs] + @classmethod + def from_dict(cls, data): + """Create a Material object from a dictionary. + + Args: + data: A Material dictionary following the format below. + + .. code-block:: python + + { + "type": "Material", + "name": "Concrete", + "thermalcond": 1.311, # thermal conductivity [W m-1 K-1] + "volheat": 1874432.0 # volumetric heat capacity [J m-3 K-1] + } + """ + assert data['type'] == 'Material', 'Expected ' \ + 'Material dictionary. Got {}.'.format(data['type']) + + return cls(data['thermalcond'], data['volheat'], data['name'])
    + + +
    +[docs] + def to_dict(self): + """Material dictionary representation.""" + base = {'type': 'Material'} + base['name'] = self.name + base['thermalcond'] = self.thermalcond + base['volheat'] = self.volheat + return base
    + + + def __repr__(self): + return "Material, name: {}\n thermalcond: {}\n volheat: {}".format( + self.name, self.thermalcond, self.volheat)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/param.html b/docs/_modules/uwg/param.html new file mode 100644 index 00000000..b5a8f2dc --- /dev/null +++ b/docs/_modules/uwg/param.html @@ -0,0 +1,608 @@ + + + + + + + uwg.param — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.param

    +"""Geographic Parameters class."""
    +
    +
    +
    +[docs] +class Param(object): + """Geographic Parameters class. + + Args: + dayBLHeight: Daytime mixing height [orig: 700] [m]. + nightBLHeight: Nighttime boundary-layer height + (orig: 80, Sing: 80, Bub-Cap: 50) [m] + refHeight: Reference height at which the vertical profile of potential + temperature is vertical + tempHeight: Temperature measuremnt height at the weather station [m] + windHeight: Air velocity measuremnt height at the weather station [m] + circCoeff: Wind scaling coefficient + dayThreshold: Heat flux threshold for daytime conditions [W m-2] + nightThreshold: Heat flux threshold for nighttime conditions [W m-2] + treeFLat: Value between 0 and 1 for latent fraction of trees + grassFLat: Value between 0 and 1 for latent fraction of grass + vegAlbedo: Value between 0 and 1 for albedo of vegetation + vegStart: Value between 1 and 12 for begin month for vegetation participation + vegEnd: Value between 1 and 12 for end month for vegetation participation + nightSetStart: Begin hour for night thermal set point schedule + nightSetEnd: End hour for night thermal set point schedule + windMin: Minimum wind speed [m s-1] + wgmax: Maximum film water depth on horizontal surfaces [m] + exCoeff: Exchange velocity coefficient + maxdx: Maximum discretization length for the UBL model [m] + g: Gravity [m s-2] + cp: Heat capacity for air [J/kg K] + vk: Von karman constant [dimensionless] + r: Gas constant for dry air [J/kg K] + rv: Gas constant for water vapor [J/kg K] + lv: Latent heat of evaporation [J/kg] + pi: Pi + sigma: Stefan Boltzmann constant [W K-4 m-2] + waterDens: Water density [kg m-3] + lvtt: Undefined. + tt: Undefined. + estt: Undefined. + cl: Undefined. + cpv: Undefined. + b : Coefficients derived by Louis [1979] + cm : Undefined. + colburn: [Pr/Sc]^[2/3] for Colburn analogy in water evaporation + + Properties: + * dayBLHeight + * nightBLHeight + * refHeight + * tempHeight + * windHeight + * circCoeff + * dayThreshold + * nightThreshold + * treeFLat + * grassFLat + * vegAlbedo + * vegStart + * vegEnd + * nightSetStart + * nightSetEnd + * windMin + * wgmax + * exCoeff + * maxdx + * g + * cp + * vk + * r + * rv + * lv + * pi + * sigma + * waterDens + * lvtt + * tt + * estt + * cl + * cpv + * b + * cm + * colburn + """ + + def __init__(self, dayBLHeight, nightBLHeight, refHeight, tempHeight, windHeight, + circCoeff, dayThreshold, nightThreshold, treeFLat, grassFLat, vegAlbedo, + vegStart, vegEnd, nightSetStart, nightSetEnd, windMin, wgmax, exCoeff, + maxdx, g, cp, vk, r, rv, lv, pi, sigma, waterDens, lvtt, tt, estt, cl, + cpv, b, cm, colburn): + + self.dayBLHeight = dayBLHeight + self.nightBLHeight = nightBLHeight + self.refHeight = refHeight + self.tempHeight = tempHeight + self.windHeight = windHeight + self.circCoeff = circCoeff + self.dayThreshold = dayThreshold + self.nightThreshold = nightThreshold + self.treeFLat = treeFLat + self.grassFLat = grassFLat + self.vegAlbedo = vegAlbedo + self.vegStart = vegStart + self.vegEnd = vegEnd + self.nightSetStart = nightSetStart + self.nightSetEnd = nightSetEnd + self.windMin = windMin + self.wgmax = wgmax + self.exCoeff = exCoeff + self.maxdx = maxdx + self.g = g + self.cp = cp + self.vk = vk + self.r = r + self.rv = rv + self.lv = lv + self.pi = pi + self.sigma = sigma + self.waterDens = waterDens + self.lvtt = lvtt + self.tt = tt + self.estt = estt + self.cl = cl + self.cpv = cpv + self.b = b + self.cm = cm + self.colburn = colburn + + def __repr__(self): + return 'Parameter,\n dayBLHeight: {}\n nightBLHeight: {}\n refHeight: {}\n ' \ + 'tempHeight: {}\n windHeight: {}\n circCoeff: {}\n dayThreshold: {}\n ' \ + 'nightThreshold: {}\n treeFLat: {}\n grassFLat: {}\n vegAlbedo: {}\n ' \ + 'vegStart: {}\n vegEnd: {}\n nightSetStart: {}\n nightSetEnd: {}\n ' \ + 'windMin: {}\n wgmax: {}\n exCoeff: {}\n maxdx: {}\n'.format( + self.dayBLHeight, self.nightBLHeight, self.refHeight, self.tempHeight, + self.windHeight, self.circCoeff, self.dayThreshold, self.nightThreshold, + self.treeFLat, self.grassFLat, self.vegAlbedo, self.vegStart, + self.vegEnd, self.nightSetStart, self.nightSetEnd, self.windMin, + self.wgmax, self.exCoeff, self.maxdx)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/psychrometrics.html b/docs/_modules/uwg/psychrometrics.html new file mode 100644 index 00000000..7eceb85e --- /dev/null +++ b/docs/_modules/uwg/psychrometrics.html @@ -0,0 +1,607 @@ + + + + + + + uwg.psychrometrics — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.psychrometrics

    +"""Functions for sychrometric calculations."""
    +from __future__ import division
    +
    +from math import log, pow, exp
    +
    +
    +
    +[docs] +def psychrometrics(Tdb_in, w_in, P): + """Modified version of Psychometrics by Tea Zakula MIT Building Technology Lab. + + Args: + Tdb_in: Number for dry bulb temperature (K). + w_in: Number for Humidity Ratio (kgv/kgda). + P: Atmospheric Station Pressure (P). + + Returns: + A tuple with six values + + - Tdb: Number for dry bulb temperature in (C). + + - w: Number for Humidity Ratio (kgv/kgda). + + - phi: Number for relative humidity (Pw/Pws*100). + + - h: Number for enthalpy (J/kga). + + - Tdp: Number for dew point temperature (C). + + - v: Number for specific volume (m3/kga). + """ + # Change units + c_air = 1006. # [J/kg] air heat capacity, value from ASHRAE Fundamentals + hlg = 2501000. # [J/kg] latent heat, value from ASHRAE Fundamentals + cw = 1860. # [J/kg] value from ASHRAE Fundamentals + P = P / 1000. # convert from Pa to kPa + + Tdb = Tdb_in - 273.15 + w = w_in + + # phi (RH) calculation from Tdb and w + Pw = (w * P) / (0.621945 + w) # partial pressure of water vapor + Pws = saturation_pressure(Tdb) # Get saturation pressure for given Tdb + phi = Pw / Pws * 100.0 + + # enthalpy calculation from Tdb and w + h = c_air * Tdb + w * (hlg + cw * Tdb) # [J kga-1] + + # specific volume calculation from Tdb and w + v = 0.287042 * (Tdb + 273.15) * (1 + 1.607858 * w) / P + + # dew point calculation from w + _pw = (w * P) / (0.621945 + w) # water vapor partial pressure in kPa + try: + alpha = log(_pw) + except ValueError: # case of zero humidity + alpha = -3 # just assume a very low value + + Tdp = 6.54 + 14.526 * alpha + pow(alpha, 2) * 0.7389 + pow(alpha, 3) * 0.09486 + \ + pow(_pw, 0.1984) * 0.4569 # valid for Tdp between 0 C and 93 C + + return Tdb, w, phi, h, Tdp, v
    + + + +
    +[docs] +def saturation_pressure(Tdb_): + """Saturation pressure from dry bulb pressure. + + Args: + Tdb_: Dry bulb temperature (K). + + Returns: + Saturation pressure. + """ + T = Tdb_ + 273.15 + + # N.B In Matlab, negative values are converted to complex values. + # log(-x) = log(x) + log(-1) = log(x) + i*pi + # Python will throw an exception. Negative value occurs here if simulation + # timestep (dtSim) is large, i.e 3600s. + _Pws = exp(-1 * 5.8002206e3 / T + 1.3914993 + 4.8640239e-2 * T * -1.0 + + 4.1764768e-5 * pow(T, 2) - 1.4452093e-8 * pow(T, 3) + + 6.5459673 * log(T)) # Pa + + return _Pws / 1000. # kPa
    + + + +
    +[docs] +def moist_air_density(P, Tdb, H): + """Moist air density (kgv m-3) from dry bulb temp, HR, and pressure[1][2][3]. + + Note: + [1] ASHRAE Fundamentals (2005) ch. 6 eqn. 28 + [2] ASHRAE Fundamentals (2009) ch. 1 eqn. 28 + [3] https://github.com/psychrometrics/Libraries/blob/master/Psychrometrics_SI.cpp + + Args: + P: Number for Pressure (P). + Tdb: Number for dry bulb temperature in (C). + H: Number for Humidity Ratio (kgv/kgda). + + Returns: + Moist air density (kgv m-3). + """ + + return P / (1000 * 0.287042 * Tdb * (1. + 1.607858 * H))
    + + + +
    +[docs] +def hum_from_rhum_temp(RH, T, P): + """Specific Humidity (kgh20/kgn202) from RH, T and Pa. + + Args: + RH: Number for Relative Humidity. + T: Number for dry bulb temperature (C). + P: Number for air pressure (P). + + Returns: + Specific Humidity (kgh20/kgn202). + """ + # Saturation vapour pressure from ASHRAE + C8 = -5.8002206e3 + C9 = 1.3914993 + C10 = -4.8640239e-2 + C11 = 4.1764768e-5 + C12 = -1.4452093e-8 + C13 = 6.5459673 + + T += 273.15 + + PWS = exp(C8 / T + C9 + C10 * T + C11 * pow(T, 2) + C12 * pow(T, 3) + C13 * log(T)) + PW = RH * PWS / 100.0 # Vapour pressure + + return 0.62198 * PW / (P - PW) # 4. Specific humidity
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/readDOE.html b/docs/_modules/uwg/readDOE.html new file mode 100644 index 00000000..bff8cabe --- /dev/null +++ b/docs/_modules/uwg/readDOE.html @@ -0,0 +1,944 @@ + + + + + + + uwg.readDOE — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.readDOE

    +from __future__ import division, print_function
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +import sys
    +import os
    +
    +try:
    +    import cPickle as pickle
    +except ImportError:
    +    import pickle
    +
    +from .building import Building
    +from .material import Material
    +from .element import Element
    +from .BEMDef import BEMDef
    +from .schdef import SchDef
    +from .utilities import read_csv, str2fl
    +# to avoid circular imports load from util
    +from .utilities import REF_BLDTYPE, REF_BUILTERA, REF_ZONETYPE
    +
    +
    +DIR_CURR = os.path.abspath(os.path.dirname(__file__))
    +DIR_DOE_PATH = os.path.join(DIR_CURR, "..", "resources", "DOERefBuildings")
    +
    +# Define standards: 16 buiding types, 3 built eras, 16 climate zones
    +
    +
    +
    +[docs] +def readDOE(serialize_output=True): + """ + Read csv files of DOE buildings + Sheet 1 = BuildingSummary + Sheet 2 = ZoneSummary + Sheet 3 = LocationSummary + Sheet 4 = Schedules + Note BLD8 & 10 = school + + + Then make matrix of ref data as nested nested lists [16, 3, 16]: + matrix refDOE = Building objs + matrix Schedule = SchDef objs + matrix refBEM (16,3,16) = BEMDef + where: + [16,3,16] is Type = 1-16, Era = 1-3, climate zone = 1-16 + i.e. + Type: FullServiceRestaurant, Era: Pre80, Zone: 6A Minneapolis + Nested tree: + [TYPE_1: + ERA_1: + CLIMATE_ZONE_1 + ... + CLIMATE_ZONE_16 + ERA_2: + CLIMATE_ZONE_1 + ... + CLIMATE_ZONE_16 + ... + ERA_3: + CLIMATE_ZONE_1 + ... + CLIMATE_ZONE_16] + + """ + + # 16 x 3 x 16 matrix of Building, SchDef, BEMDef objects + refDOE = [[[None] * 16 for k_ in range(3)] + for j_ in range(16)] # refDOE: Building + # Schedule: SchDef + Schedule = [[[None] * 16 for k_ in range(3)] for j_ in range(16)] + refBEM = [[[None] * 16 for k_ in range(3)] + for j_ in range(16)] # refBEM: BEMDef + + # Purpose: Loop through every DOE reference csv and extract building data + # Nested loop = 16 types, 3 era, 16 zones = time complexity O(n*m*k) = 768 + for i in range(16): + + # i = 16 types of buildings + # print "\tType: {} @i={}".format(BLDTYPE[i], i) + + # Read building summary (Sheet 1) + file_doe_name_bld = os.path.join("{}".format(DIR_DOE_PATH), "BLD{}".format( + i+1), "BLD{}_BuildingSummary.csv".format(i+1)) + list_doe1 = read_csv(file_doe_name_bld) + # listof(listof 3 era values) + # Number of Floors, this will be list of floats and str if "basement" + nFloor = str2fl(list_doe1[3][3:6]) + glazing = str2fl(list_doe1[4][3:6]) # [?] Total + hCeiling = str2fl(list_doe1[5][3:6]) # [m] Ceiling height + ver2hor = str2fl(list_doe1[7][3:6]) # Wall to Skin Ratio + # [m2] Gross Dimensions - Total area + AreaRoof = str2fl(list_doe1[8][3:6]) + + # Read zone summary (Sheet 2) + file_doe_name_zone = os.path.join("{}".format( + DIR_DOE_PATH), "BLD{}".format(i+1), "BLD{}_ZoneSummary.csv".format(i+1)) + list_doe2 = read_csv(file_doe_name_zone) + # listof(listof 3 eras) + AreaFloor = str2fl([list_doe2[2][5], list_doe2[3] + [5], list_doe2[4][5]]) # [m2] + Volume = str2fl([list_doe2[2][6], list_doe2[3][6], + list_doe2[4][6]]) # [m3] + AreaWall = str2fl([list_doe2[2][8], list_doe2[3][8], + list_doe2[4][8]]) # [m2] + AreaWindow = str2fl([list_doe2[2][9], list_doe2[3] + [9], list_doe2[4][9]]) # [m2] + Occupant = str2fl([list_doe2[2][11], list_doe2[3][11], + list_doe2[4][11]]) # Number of People + Light = str2fl([list_doe2[2][12], list_doe2[3] + [12], list_doe2[4][12]]) # [W/m2] + # [W/m2] Electric Plug and Process + Elec = str2fl([list_doe2[2][13], list_doe2[3][13], list_doe2[4][13]]) + # [W/m2] Gas Plug and Process + Gas = str2fl([list_doe2[2][14], list_doe2[3][14], list_doe2[4][14]]) + # [Litres/hr] Peak Service Hot Water + SHW = str2fl([list_doe2[2][15], list_doe2[3][15], list_doe2[4][15]]) + # [L/s/m2] Ventilation + Vent = str2fl([list_doe2[2][17], list_doe2[3][17], list_doe2[4][17]]) + # Air Changes Per Hour (ACH) Infiltration + Infil = str2fl([list_doe2[2][20], list_doe2[3][20], list_doe2[4][20]]) + + # Read location summary (Sheet 3) + file_doe_name_location = os.path.join("{}".format( + DIR_DOE_PATH), "BLD{}".format(i+1), "BLD{}_LocationSummary.csv".format(i+1)) + list_doe3 = read_csv(file_doe_name_location) + # (listof (listof 3 eras (listof 16 climate types))) + TypeWall = [list_doe3[3][4:20], list_doe3[14][4:20], + list_doe3[25][4:20]] # Construction type + RvalWall = str2fl([list_doe3[4][4:20], list_doe3[15] + [4:20], list_doe3[26][4:20]]) # [m2*K/W] R-value + TypeRoof = [list_doe3[5][4:20], list_doe3[16][4:20], + list_doe3[27][4:20]] # Construction type + RvalRoof = str2fl([list_doe3[6][4:20], list_doe3[17] + [4:20], list_doe3[28][4:20]]) # [m2*K/W] R-value + Uwindow = str2fl([list_doe3[7][4:20], list_doe3[18] + [4:20], list_doe3[29][4:20]]) # [W/m2*K] U-factor + SHGC = str2fl([list_doe3[8][4:20], list_doe3[19][4:20], + list_doe3[30][4:20]]) # [-] coefficient + HVAC = str2fl([list_doe3[9][4:20], list_doe3[20][4:20], + list_doe3[31][4:20]]) # [kW] Air Conditioning + HEAT = str2fl([list_doe3[10][4:20], list_doe3[21][4:20], + list_doe3[32][4:20]]) # [kW] Heating + COP = str2fl([list_doe3[11][4:20], list_doe3[22][4:20], + list_doe3[33][4:20]]) # [-] Air Conditioning COP + # [%] Heating Efficiency + EffHeat = str2fl([list_doe3[12][4:20], list_doe3[23] + [4:20], list_doe3[34][4:20]]) + # [m3/s] Fan Max Flow Rate + FanFlow = str2fl([list_doe3[13][4:20], list_doe3[24] + [4:20], list_doe3[35][4:20]]) + + # Read Schedules (Sheet 4) + file_doe_name_schedules = os.path.join("{}".format( + DIR_DOE_PATH), "BLD{}".format(i+1), "BLD{}_Schedules.csv".format(i+1)) + list_doe4 = read_csv(file_doe_name_schedules) + + # listof(listof weekday, sat, sun (list of 24 fractions))) + # Equipment Schedule 24 hrs + SchEquip = str2fl([list_doe4[1][6:30], list_doe4[2] + [6:30], list_doe4[3][6:30]]) + # Light Schedule 24 hrs; Wkday=Sat=Sun=Hol + SchLight = str2fl([list_doe4[4][6:30], list_doe4[5] + [6:30], list_doe4[6][6:30]]) + # Occupancy Schedule 24 hrs + SchOcc = str2fl([list_doe4[7][6:30], list_doe4[8] + [6:30], list_doe4[9][6:30]]) + # Cooling Setpoint Schedule 24 hrs + SetCool = str2fl([list_doe4[10][6:30], list_doe4[11] + [6:30], list_doe4[12][6:30]]) + # Heating Setpoint Schedule 24 hrs; summer design + SetHeat = str2fl([list_doe4[13][6:30], list_doe4[14] + [6:30], list_doe4[15][6:30]]) + # Gas Equipment Schedule 24 hrs; wkday=sat + SchGas = str2fl([list_doe4[16][6:30], list_doe4[17] + [6:30], list_doe4[18][6:30]]) + # Solar Water Heating Schedule 24 hrs; wkday=summerdesign, sat=winterdesgin + SchSWH = str2fl([list_doe4[19][6:30], list_doe4[20] + [6:30], list_doe4[21][6:30]]) + + for j in range(3): + + # j = 3 built eras + # print"\tEra: {} @j={}".format(BUILTERA[j], j) + + for k in range(16): + + # k = 16 climate zones + # print "\tClimate zone: {} @k={}".format(ZONETYPE[k], k) + + B = Building( + hCeiling[j], # floorHeight by era + 1, # intHeatNight + 1, # intHeatDay + 0.1, # intHeatFRad + 0.1, # intHeatFLat + Infil[j], # infil (ACH) by era + # vent (m^3/s/m^2) by era, converted from liters + Vent[j]/1000., + glazing[j], # glazing ratio by era + # uValue by era, by climate type + Uwindow[j][k], + # SHGC, by era, by climate type + SHGC[j][k], + 'AIR', # cooling condensation system type: AIR, WATER + # cop by era, climate type + COP[j][k], + # coolCap converted to W/m2 by era, climate type + (HVAC[j][k]*1000.0)/AreaFloor[j], + # heatEff by era, climate type + EffHeat[j][k], + 293) # initialTemp at 20 C + + # Not defined in the constructor + # heating Capacity converted to W/m2 by era, climate type + B.heat_cap = (HEAT[j][k] * 1000.0) / AreaFloor[j] + refDOE[i][j][k] = B + + # Define wall, mass(floor), roof + # Reference from E+ for conductivity, thickness (reference below) + + # Material: (thermalCond, volHeat = specific heat * density) + Concrete = Material(1.311, 836.8 * 2240, "Concrete") + Insulation = Material(0.049, 836.8 * 265.0, "Insulation") + Gypsum = Material(0.16, 830.0 * 784.9, "Gypsum") + Wood = Material(0.11, 1210.0 * 544.62, "Wood") + Stucco = Material(0.6918, 837.0 * 1858.0, "Stucco") + + # Wall (1 in stucco, concrete, insulation, gypsum) + # Check TypWall by era, by climate + if TypeWall[j][k] == "MassWall": + # Construct wall based on R value of Wall from refDOE and properties defined above + # 1" stucco, 8" concrete, tbd insulation, 1/2" gypsum + Rbase = 0.271087 # R val based on stucco, concrete, gypsum + Rins = RvalWall[j][k] - Rbase # find insulation value + D_ins = Rins * Insulation.thermalcond # depth of ins from m2*K/W * W/m*K = m + if D_ins > 0.01: + thickness = [0.0254, 0.0508, 0.0508, + 0.0508, 0.0508, D_ins, 0.0127] + layers = [Stucco, Concrete, Concrete, + Concrete, Concrete, Insulation, Gypsum] + else: + # if it's less then 1 cm don't include in layers + thickness = [0.0254, 0.0508, + 0.0508, 0.0508, 0.0508, 0.0127] + layers = [Stucco, Concrete, Concrete, + Concrete, Concrete, Gypsum] + + wall = Element(0.08, 0.92, thickness, layers, + 0., 293., 0., "MassWall") + + # If mass wall, assume mass floor (4" concrete) + # Mass (assume 4" concrete); + alb = 0.2 + emis = 0.9 + thickness = [0.054, 0.054] + concrete = Material(1.31, 2240.0*836.8, 'Concrete') + mass = Element(alb, emis, thickness, [ + concrete, concrete], 0, 293, 1, "MassFloor") + + elif TypeWall[j][k] == "WoodFrame": + # 0.01m wood siding, tbd insulation, 1/2" gypsum + Rbase = 0.170284091 # based on wood siding, gypsum + Rins = RvalWall[j][k] - Rbase + D_ins = Rins * Insulation.thermalcond # depth of insulatino + + if D_ins > 0.01: + thickness = [0.01, D_ins, 0.0127] + layers = [Wood, Insulation, Gypsum] + else: + thickness = [0.01, 0.0127] + layers = [Wood, Gypsum] + + wall = Element(0.22, 0.92, thickness, layers, + 0., 293., 0., "WoodFrameWall") + + # If wood frame wall, assume wooden floor + alb = 0.2 + emis = 0.9 + thickness = [0.05, 0.05] + wood = Material(1.31, 2240.0*836.8, 'Wood') + mass = Element(alb, emis, thickness, [ + wood, wood], 0., 293., 1., "WoodFloor") + + elif TypeWall[j][k] == "SteelFrame": + # 1" stucco, 8" concrete, tbd insulation, 1/2" gypsum + Rbase = 0.271087 # based on stucco, concrete, gypsum + Rins = RvalWall[j][k] - Rbase + D_ins = Rins * Insulation.thermalcond + if D_ins > 0.01: + thickness = [0.0254, 0.0508, 0.0508, + 0.0508, 0.0508, D_ins, 0.0127] + layers = [Stucco, Concrete, Concrete, + Concrete, Concrete, Insulation, Gypsum] + else: # If insulation is too thin, assume no insulation + thickness = [0.0254, 0.0508, + 0.0508, 0.0508, 0.0508, 0.0127] + layers = [Stucco, Concrete, Concrete, + Concrete, Concrete, Gypsum] + wall = Element(0.15, 0.92, thickness, layers, + 0., 293., 0., "SteelFrame") + + # If mass wall, assume mass foor + # Mass (assume 4" concrete), + alb = 0.2 + emis = 0.93 + thickness = [0.05, 0.05] + mass = Element(alb, emis, thickness, [ + Concrete, Concrete], 0., 293., 1., "MassFloor") + + elif TypeWall[j][k] == "MetalWall": + # metal siding, insulation, 1/2" gypsum + alb = 0.2 + emis = 0.9 + # use derived insul thickness or 0.01 based on max + D_ins = max( + (RvalWall[j][k] * Insulation.thermalcond) / 2, 0.01) + thickness = [D_ins, D_ins, 0.0127] + materials = [Insulation, Insulation, Gypsum] + wall = Element(alb, emis, thickness, + materials, 0, 293, 0, "MetalWall") + + # Mass (assume 4" concrete); + alb = 0.2 + emis = 0.9 + thickness = [0.05, 0.05] + concrete = Material(1.31, 2240.0*836.8, 'Concrete') + mass = Element(alb, emis, thickness, [ + concrete, concrete], 0., 293., 1., "MassFloor") + + # Roof + if TypeRoof[j][k] == "IEAD": # Insulation Entirely Above Deck + # IEAD-> membrane, insulation, decking + alb = 0.2 + emis = 0.93 + D_ins = max(RvalRoof[j][k] * + Insulation.thermalcond / 2., 0.01) + roof = Element(alb, emis, [D_ins, D_ins], [ + Insulation, Insulation], 0., 293., 1, "IEAD") + + elif TypeRoof[j][k] == "Attic": + # IEAD-> membrane, insulation, decking + alb = 0.2 + emis = 0.9 + D_ins = max(RvalRoof[j][k] * + Insulation.thermalcond / 2., 0.01) + roof = Element(alb, emis, [D_ins, D_ins], [ + Insulation, Insulation], 0., 293., 1, "Attic") + + elif TypeRoof[j][k] == "MetalRoof": + # IEAD-> membrane, insulation, decking + alb = 0.2 + emis = 0.9 + D_ins = max(RvalRoof[j][k] * + Insulation.thermalcond / 2., 0.01) + roof = Element(alb, emis, [D_ins, D_ins], [ + Insulation, Insulation], 0., 293., 1, "MetalRoof") + + # Define bulding energy model, set fraction of the urban floor space of this typology to zero + bldtype, builtera, zonetype = \ + REF_BLDTYPE[i], REF_BUILTERA[j], REF_ZONETYPE[k] + refBEM[i][j][k] = BEMDef(building=B, mass=mass, wall=wall, roof=roof, + bldtype=bldtype, builtera=builtera) + refBEM[i][j][k].zonetype = zonetype # for testing + # max fan flow rate (m^3/s) per DOE + refBEM[i][j][k].building.FanMax = FanFlow[j][k] + + # Calculate internal heat loads for schedule + # W/m^2 (max) for electrical plug process + q_elec = Elec[j] + q_light = Light[j] # W/m^2 (max) for light + n_occ = Occupant[j]/AreaFloor[j] # Person/m^2 + q_gas = Gas[j] # W/m^2 (max) for gas + vent = Vent[j]/1000.0 # m^3/s/m^2 + v_swh = SHW[j]/AreaFloor[j] # L/hr/m2 + + Schedule[i][j][k] = SchDef(elec=SchEquip, gas=SchGas, light=SchLight, occ=SchOcc, cool=SetCool, + heat=SetHeat, swh=SchSWH, q_elec=q_elec, q_gas=q_gas, q_light=q_light, + n_occ=n_occ, vent=vent, v_swh=v_swh, bldtype=bldtype, builtera=builtera) + Schedule[i][j][k].zonetype = zonetype # for testing only. + + # if not test serialize refDOE,refBEM,Schedule and store in resources + if serialize_output: + + # create a binary file for serialized obj + pkl_file_path = os.path.join(DIR_CURR, 'refdata', 'readDOE.pkl') + pickle_readDOE = open(pkl_file_path, 'wb') + + # dump in ../resources + # Pickle objects, protocol 1 b/c binary file + # pickle.dump(refDOE, pickle_readDOE,1) # Not used. Commented out. + pickle.dump(refBEM, pickle_readDOE, 1) + pickle.dump(Schedule, pickle_readDOE, 1) + + pickle_readDOE.close() + + return refBEM, Schedule
    + + + +if __name__ == "__main__": + + # Set to True only if you want create new .pkls of DOE refs + # Use --serialize switch to serialize the readDOE data + if len(sys.argv) > 1 and sys.argv[1] == "--serialize": + refBEM, Schedule = readDOE(True) + else: + refBEM, Schedule = readDOE(False) + + +# Material ref from E+ +# 1/2IN Gypsum, !- Name +# Smooth, !- Roughness +# 0.0127, !- Thickness {m} +# 0.1600, !- Conductivity {W/m-K} +# 784.9000, !- Density {kg/m3} +# 830.0000, !- Specific Heat {J/kg-K} +# 0.9000, !- Thermal Absorptance +# 0.9200, !- Solar Absorptance +# 0.9200; !- Visible Absorptance +# +# Material, +# 1IN Stucco, !- Name +# Smooth, !- Roughness +# 0.0253, !- Thickness +# 0.6918, !- Conductivity +# 1858.0000, !- Density +# 837.0000, !- Specific Heat +# 0.9000, !- Thermal Absorptance +# 0.9200, !- Solar Absorptance +# 0.9200; !- Visible Absorptance +# +# Material, +# 8IN CONCRETE HW, !- Name +# Rough, !- Roughness +# 0.2032, !- Thickness {m} +# 1.3110, !- Conductivity {W/m-K} +# 2240.0000, !- Density {kg/m3} +# 836.8000, !- Specific Heat {J/kg-K} +# 0.9000, !- Thermal Absorptance +# 0.7000, !- Solar Absorptance +# 0.7000; !- Visible Absorptance +# +# Material, +# Mass NonRes Wall Insulation, !- Name +# MediumRough, !- Roughness +# 0.0484268844343858, !- Thickness {m} +# 0.049, !- Conductivity {W/m-K} +# 265.0000, !- Density {kg/m3} +# 836.8000, !- Specific Heat {J/kg-K} +# 0.9000, !- Thermal Absorptance +# 0.7000, !- Solar Absorptance +# 0.7000; !- Visible Absorptance +# +# Material, +# Std Wood 6inch, !- Name +# MediumSmooth, !- Roughness +# 0.15, !- Thickness {m} +# 0.12, !- Conductivity {W/m-K} +# 540.0000, !- Density {kg/m3} +# 1210, !- Specific Heat {J/kg-K} +# 0.9000000, !- Thermal Absorptance +# 0.7000000, !- Solar Absorptance +# 0.7000000; !- Visible Absorptance! Common Materials +# +# Material, +# Wood Siding, !- Name +# MediumSmooth, !- Roughness +# 0.0100, !- Thickness {m} +# 0.1100, !- Conductivity {W/m-K} +# 544.6200, !- Density {kg/m3} +# 1210.0000, !- Specific Heat {J/kg-K} +# 0.9000, !- Thermal Absorptance +# 0.7800, !- Solar Absorptance +# 0.7800; !- Visible Absorptance +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/schdef.html b/docs/_modules/uwg/schdef.html new file mode 100644 index 00000000..d25f30bb --- /dev/null +++ b/docs/_modules/uwg/schdef.html @@ -0,0 +1,865 @@ + + + + + + + uwg.schdef — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.schdef

    +"""Class for Schedule Definition."""
    +
    +from .utilities import float_positive, REF_BUILTERA_SET, REF_BUILTERA
    +
    +
    +try:
    +    str = basestring
    +except NameError:
    +    pass
    +
    +
    +
    +[docs] +class SchDef(object): + """Schedule definition class. + + The internal load weekly schedules consists of three lists of 24 values representing hours in + weekday, Saturday, and Sunday. + + Args: + elec: Weekly schedule of fractional electricity plug process loads. + gas: Weekly schedule of fractional gas process loads. + light: Weekly schedule of fractional light process loads. + occ: Weekly schedule of fractional occupant number. + cool: Weekly schedule of cooling temperatures. + heat: Weekly schedule of heating temperatures. + q_elec: Maximum electrical plug process load [W/m2]. + q_gas: Maximum gas process load per unit area [W/m2]. + q_light: Maximum light process load per unit area [W/m2]. + n_occ: Maximum number of occupants per unit area [person/m2]. + vent: Maximum ventilation rate per unit area [m3/s/m2]. + swh: Optional property for weekly schedule of fractional hot water rate. This + property will be a weekly schedule of zero values, as default. + v_swh: Optional property for maximum volumetric hot water rate per unit area + [L/hr/m2]. (Default: 0). + bldtype: Text referring to a building type. By default, 16 building types are + defined in the UWG according to models from the Department of Energy (DOE). + Custom building types can also be defined with a new name. Note that this + value along with the BEMDef builtera must exactly match the identifiers in + the UWG bld list in order to specify the fraction of total built stock the + building occupies in the UWG simulation. Choose from the following to + reference or overwrite a BEM associated with a DOE reference building type: + 'fullservicerestaurant', 'hospital', 'largehotel', 'largeoffice', + 'mediumoffice', 'midriseapartment', 'outpatient', 'primaryschool', + 'quickservicerestaurant', 'secondaryschool', 'smallhotel', 'smalloffice', + 'standaloneretail', 'stripmall', 'supermarket', or 'warehouse'. + builtera: Text defining building built era. Must be one of the following: + "pre80" (pre-1980s), "pst80" (post-1980s), or "new" (new construction). + This value along with the bldtype must exactly match the identifiers in + the bld array in order to specify the fraction of total built stock the + building occupies in the UWG simulation. + + Properties: + * elec + * gas + * light + * occ + * cool + * heat + * swh + * q_elec + * q_gas + * q_light + * n_occ + * vent + * v_swh + * bldtype + * builtera + * zonetype + """ + DEFAULT_SWH = [[0 for j in range(24)] for i in range(3)] + + def __init__(self, elec, gas, light, occ, cool, heat, q_elec, q_gas, q_light, + n_occ, vent, bldtype, builtera, swh=DEFAULT_SWH, v_swh=0): + self.elec = elec + self.gas = gas + self.light = light + self.occ = occ + self.cool = cool + self.heat = heat + self.q_elec = q_elec + self.q_gas = q_gas + self.q_light = q_light + self.n_occ = n_occ + self.vent = vent + self.v_swh = v_swh + self.swh = swh + # Properties to be set in readDOE + self.bldtype = bldtype # DOE reference building type + self.builtera = builtera # pre80, pst80, new + self.zonetype = None # climate zone number (only used in testing). + + @property + def elec(self): + """Get or set weekly schedule of fractional electricity plug process loads. + + Weekly schedule consists of three lists of 24 values representing hours in + weekday, Saturday, and Sunday. + """ + return self._elec + + @elec.setter + def elec(self, value): + self._elec = SchDef.check_week_validity(value, 'elec') + + @property + def gas(self): + """Get or set weekly schedule of fractional gas process loads. + + Weekly schedule consists of three lists of 24 values representing hours in + weekday, Saturday, and Sunday. + """ + return self._gas + + @gas.setter + def gas(self, value): + self._gas = SchDef.check_week_validity(value, 'gas') + + @property + def light(self): + """Get or set weekly schedule of fractional light process loads. + + Weekly schedule consists of three lists of 24 values representing hours in + weekday, Saturday, and Sunday. + """ + return self._light + + @light.setter + def light(self, value): + self._light = SchDef.check_week_validity(value, 'light') + + @property + def occ(self): + """Get or set weekly schedule of occupant number. + + Weekly schedule consists of three lists of 24 values representing hours in + weekday, Saturday, and Sunday. + """ + return self._occ + + @occ.setter + def occ(self, value): + self._occ = SchDef.check_week_validity(value, 'occ') + + @property + def cool(self): + """Get or set weekly schedule of cooling temperatures. + + Weekly schedule consists of three lists of 24 values representing hours in + weekday, Saturday, and Sunday. + """ + return self._cool + + @cool.setter + def cool(self, value): + self._cool = SchDef.check_week_validity(value, 'cool') + + @property + def heat(self): + """Get or set weekly schedule of heating temperatures. + + Weekly schedule consists of three lists of 24 values representing hours in + weekday, Saturday, and Sunday. + """ + return self._heat + + @heat.setter + def heat(self, value): + self._heat = SchDef.check_week_validity(value, 'heat') + + @property + def swh(self): + """Get or set weekly schedule of fractional hot water rate. + + Weekly schedule consists of three lists of 24 values representing hours in + weekday, Saturday, and Sunday. + """ + return self._swh + + @swh.setter + def swh(self, value): + self._swh = SchDef.check_week_validity(value, 'swh') + + @property + def q_elec(self): + """Get or set maximum electrical plug process load [W/m2].""" + return self._q_elec + + @q_elec.setter + def q_elec(self, value): + self._q_elec = float_positive(value, 'q_elec') + + @property + def q_gas(self): + """Get or set maximum gas process load per unit area [W/m2].""" + return self._q_gas + + @q_gas.setter + def q_gas(self, value): + self._q_gas = float_positive(value, 'q_gas') + + @property + def q_light(self): + """Get or set maximum light process load per unit area [W/m2].""" + return self._q_light + + @q_light.setter + def q_light(self, value): + self._q_light = float_positive(value, 'q_light') + + @property + def n_occ(self): + """Get or set maximum number of occupants per unit area [person/m2].""" + return self._n_occ + + @n_occ.setter + def n_occ(self, value): + self._n_occ = float_positive(value, 'n_occ') + + @property + def vent(self): + """Get or set maximum ventilation rate per unit area [m3/s/m2].""" + return self._vent + + @vent.setter + def vent(self, value): + self._vent = float_positive(value, 'vent') + + @property + def v_swh(self): + """Get or set maximum volumetric hot water rate per unit area [L/hr/m2].""" + return self._v_swh + + @v_swh.setter + def v_swh(self, value): + self._v_swh = float_positive(value, 'v_swh') + + @property + def bldtype(self): + """Get or set text for building type. + + By default, 16 building types are defined in the UWG according to models from + the Department of Energy (DOE). Choose from the following to reference or + overwrite a schedule associated with a DOE reference building type: + + * 'fullservicerestaurant' + * 'hospital' + * 'largehotel' + * 'largeoffice' + * 'medoffice' + * 'midriseapartment' + * 'outpatient' + * 'primaryschool' + * 'quickservicerestaurant' + * 'secondaryschool' + * 'smallhotel' + * 'smalloffice' + * 'standaloneretail' + * 'stripmall' + * 'supermarket' + * 'warehouse' + + Custom building types can also be defined with a new name. If a custom SchDef is + defined with the same name as a reference DOE building type from the list above, + the reference SchDef will be overwritten by the custom SchDef. Note that this + value along with the SchDef builtera must exactly match the identifiers in the + UWG bld list in order to specify the fraction of total built stock the building + occupies in the UWG simulation. + """ + return self._bldtype + + @bldtype.setter + def bldtype(self, value): + assert isinstance(value, str), 'The bldtype must be a string. ' \ + 'Got: {}.'.format(value.lower()) + self._bldtype = value + + @property + def builtera(self): + """Get or set text for built era. + + Must be one of the following: + + * 'pre80' - pre-1980s + * 'pst80' - post-1980s + * 'new' - new construction + + This value along with the bldtype must exactly match the identifiers in + the bld array in order to specify the fraction of total built stock the + building occupies in the UWG simulation. + """ + return self._builtera + + @builtera.setter + def builtera(self, value): + assert isinstance(value, str) and value in REF_BUILTERA_SET, \ + 'The builtera must be one of {}.Got: {}.'.format( + REF_BUILTERA, value.lower()) + self._builtera = value + +
    +[docs] + @classmethod + def from_dict(cls, data): + """Create a SchDef object from a dictionary. + + Args: + data: A SchDef dictionary following the format below. + + .. code-block:: python + + _example_week = [ + [0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.7, 0.9, 0.9, 0.6, 0.6, 0.6, 0.6, 0.6, + 0.7, 0.8, 0.9, 0.9, 0.8, 0.8, 0.7, 0.3, 0.2, 0.2], # Weekday + [0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.6, 0.7, 0.7, 0.7, 0.7, 0.5, 0.4, 0.3, 0.2, 0.2], # Saturday + [0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, + 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.2, 0.2]] # Sunday + + { + "elec": _example_week, + "gas": _example_week, + "light": _example_week, + "occ": _example_week, + "cool": _example_week, + "heat": _example_week, + "swh": _example_week, + "q_elec" = q_elec, + "q_gas" = q_gas, + "q_light" = q_light, + "n_occ" = n_occ, + "vent" = vent, + "v_swh" = v_swh, + "bldtype": 0, + "builtera": 1 + } + """ + assert data['type'] == 'SchDef', 'Expected ' \ + 'SchDef dictionary. Got {}.'.format(data['type']) + + return cls(elec=data['elec'], gas=data['gas'], light=data['light'], + occ=data['occ'], cool=data['cool'], heat=data['heat'], + swh=data['swh'], q_elec=data['q_elec'], q_gas=data['q_gas'], + q_light=data['q_light'], n_occ=data['n_occ'], vent=data['vent'], + v_swh=data['v_swh'], bldtype=data['bldtype'], + builtera=data['builtera'])
    + + +
    +[docs] + def to_dict(self): + """SchDef dictionary representation.""" + base = {'type': 'SchDef'} + base['elec'] = self.elec + base['gas'] = self.gas + base['light'] = self.light + base['occ'] = self.occ + base['cool'] = self.cool + base['heat'] = self.heat + base['swh'] = self.swh + base['q_elec'] = self.q_elec + base['q_gas'] = self.q_gas + base['q_light'] = self.q_light + base['n_occ'] = self.n_occ + base['vent'] = self.vent + base['v_swh'] = self.v_swh + base['bldtype'] = self.bldtype + base['builtera'] = self.builtera + return base
    + + +
    +[docs] + @staticmethod + def check_week_validity(week, name): + assert isinstance(week, (list, tuple)), 'The {} property must be a ' \ + 'list or tuple. Got {}.'.format(name, week) + + assert len(week) == 3, 'The {} property must be a 3 x 24 matrix. Got ' \ + '{} rows.'.format(name, len(week)) + + for i, day in enumerate(week): + assert len(day) == 24, 'The {} property must be a 3 x 24 ' \ + 'matrix. Got {} columns for row {}.'.format(name, len(day), i) + for val in day: + assert isinstance(val, (float, int)), 'The {} property ' \ + 'must contain 3 lists of numbers. Got : {}.'.format( + name, val) + return week
    + + + def __repr__(self): + return 'Schedule, bldtype: {}\n builtera: {}\n q_elec: {}\n q_gas: {}\n ' \ + 'q_light: {}\n n_occ: {}\n vent: {}\n v_swh: {}\n elec: {}\n ' \ + 'gas: {}\n light: {}\n occ: {}\n cool: {}\n heat: {}\n swh: {}\n'.format( + self.bldtype, self.builtera, self.q_elec, self.q_gas, self.q_light, + self.n_occ, self.vent, self.v_swh, self.elec, self.gas, self.light, + self.occ, self.cool, self.heat, self.swh)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/simparam.html b/docs/_modules/uwg/simparam.html new file mode 100644 index 00000000..219977c4 --- /dev/null +++ b/docs/_modules/uwg/simparam.html @@ -0,0 +1,558 @@ + + + + + + + uwg.simparam — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.simparam

    +"""Class for simulation time parameters."""
    +from __future__ import division, print_function
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +import math
    +from .utilities import is_near_zero
    +
    +
    +
    +[docs] +class SimParam(object): + """Calculates simulation time parameters. + + Simulation time parameters are calculated based on initial date and weather + data time step, and simulation timestep. + + Args: + dt: Number for simulation time step in seconds. + timefor: Number for weather data time-step in seconds. + M: Number between 1 and 12 indicating the simulation start month. + DAY: Number between 1 and 31 indicating the simulation start day. + days: Number indicating number of days to simulate. + + Properties: + * dt -- uwg time simulation time step + * timeForcing -- weather data timestep + * month -- start month + * day -- start day + * days -- number of days in simulation + * timePrint -- weather data timestep + * timeDay -- number of times weather senses in a day + * timeSim -- number of steps in weather data simulation + * timeMax -- total seconds in simulation days + * nt -- total number of timesteps + * inobis -- list of julian dates for the start of the months + * julian -- simulation start julian date + * timeInitial -- epw sensor data for initial time based on julian day & timesteps + * timeFinal -- epw sensor data for final time based on julian day & timesteps + * secDay -- current seconds in day + * hourDay -- current hours in day + """ + TIMESTEP_CONFLICT_MSG = "TIMESTEP ERROR! Timestep must be a factor of 3600." + + def __init__(self, dt, timefor, M, DAY, days): + self.dt = dt + self.timeForcing = timefor + self.month = int(M) + self.day = DAY + self.days = days + self.timePrint = timefor + self.timeDay = 24 * 3600 / timefor + self.timeSim = self.timeDay * days + self.timeMax = 24. * 3600. * days + self.nt = int(round(self.timeMax / self.dt + 1)) + self.inobis = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] + self.julian = self.inobis[self.month - 1] + DAY - 1 + # H1: (julian day * number of timesteps in a day) == sensor data index in epw + H1 = int((self.inobis[self.month - 1] + DAY - 1) * self.timeDay) + self.timeInitial = H1 + 8 + self.timeFinal = int(H1 + self.timeDay * self.days - 1 + 8) + self.secDay = 0 + self.hourDay = 0 + +
    +[docs] + def update_date(self): + self.secDay = self.secDay + self.dt + + if is_near_zero(self.secDay - (3600 * 24)): + self.day += 1 + self.julian = self.julian + 1 + self.secDay = 0. + for j in range(12): + if is_near_zero(self.julian - self.inobis[j]): + self.month = self.month + 1 + self.day = 1 + + if self.secDay > (3600 * 24): + raise Exception("{}. CURRENTLY AT {}.".format( + self.TIMESTEP_CONFLICT_MSG, self.dt)) + + self.hourDay = int(math.floor(self.secDay / 3600.)) # 0 - 23hr
    + + + def __repr__(self): + return "SimParam: Start = {}/{}, days = {}, timestep = {}s".format( + self.month, int(self.day), self.days, self.dt)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/solarcalcs.html b/docs/_modules/uwg/solarcalcs.html new file mode 100644 index 00000000..9838a34e --- /dev/null +++ b/docs/_modules/uwg/solarcalcs.html @@ -0,0 +1,734 @@ + + + + + + + uwg.solarcalcs — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.solarcalcs

    +"""Class for solar calculations."""
    +from __future__ import division
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +import math
    +
    +
    +
    +[docs] +class SolarCalcs(object): + """Solar calculations. + + Args: + UCM: Urban Canopy - Building Energy Model object. + BEM: Building Energy Model object. + simTime: Simulation time object + RSM: Rural Site & Vertical Diffusion Model Object. + forc: Forcing object. + parameter: Param Object. + rural: Rural road Element object. + + Properties: + * # Properties added from solarcalcs + * dir -- direct sunlight (perpendicular to the sun's ray) + * dif -- diffuse sunlight + * tanzen -- tangente of solar zenithal angle + * critOrient -- critical canyon angle for which solar radiation reaches the road + * horSol -- direct horizontal radiation + * Kw_term -- fractional terms for wall + * Kr_term -- fractional terms for road + * mr -- fractional terms for wall + * mw -- fractional terms for road + * ut -- elapsed hours on current day + * ad -- fractional year in radians + * eqtime -- time variable + * decsol -- solar declination angle + * zenith -- Angle between normal to earth's surface and sun position + """ + + def __init__(self, UCM, BEM, simTime, RSM, forc, parameter, rural): + self.UCM = UCM + self.BEM = BEM + self.simTime = simTime + self.RSM = RSM + self.forc = forc + self.parameter = parameter + self.rural = rural + +
    +[docs] + def solarcalcs(self): + """ Solar Calculation. + + Mutates RSM, BEM, and UCM objects based on following parameters: + + * UCM -- Urban Canopy - Building Energy Model object + * BEM -- Building Energy Model object + * simTime -- Simulation time object + * RSM -- Rural Site & Vertical Diffusion Model Object + * forc -- Forcing object + * parameter -- Geo Param Object + * rural -- Rural road Element object + """ + + # Direct sunlight (perpendicular to the sun's ray) + self.dir = self.forc.dir + self.dif = self.forc.dif # Diffuse sunlight + + if (self.dir + self.dif) > 0.: + + # calculate zenith tangent, and critOrient solar angles + self.solarangles() + + # Direct horizontal radiation + self.horSol = max(math.cos(self.zenith) * self.dir, 0.0) + # Fractional terms for wall & road + self.Kw_term = ( + min(abs(1. / self.UCM.canAspect*(0.5 - self.critOrient / math.pi) + 1 / + math.pi * self.tanzen * (1 - math.cos(self.critOrient))), 1.)) + self.Kr_term = ( + min(abs(2. * self.critOrient / math.pi - + (2 / math.pi * self.UCM.canAspect * self.tanzen) * + (1 - math.cos(self.critOrient))), + 1 - 2 * self.UCM.canAspect * self.Kw_term)) + + # Direct and diffuse solar radiation + # Assume trees are shorter than buildings + self.bldSol = self.horSol * self.Kw_term + self.UCM.wallConf * self.dif + self.roadSol = self.horSol * self.Kr_term + self.UCM.roadConf * self.dif + + # Solar reflections. Add diffuse radiation from vegetation to alb_road if + # in season + if self.simTime.month < self.parameter.vegStart or \ + self.simTime.month > self.parameter.vegEnd: + alb_road = self.UCM.road.albedo + else: + alb_road = self.UCM.road.albedo * (1. - self.UCM.road.vegcoverage) + \ + self.parameter.vegAlbedo * self.UCM.road.vegcoverage + + # First set of reflections + rr = alb_road * self.roadSol + rw = self.UCM.alb_wall * self.bldSol + + # bounces + fr = ( + 1. - (1. - 2. * self.UCM.wallConf) * self.UCM.alb_wall + + (1. - self.UCM.roadConf) * self.UCM.wallConf * alb_road * + self.UCM.alb_wall) + + # (1.0-self.UCM.roadConf) road to wall view + self.mr = (rr + (1.0 - self.UCM.roadConf) * alb_road * + (rw + self.UCM.wallConf * self.UCM.alb_wall * rr)) / fr + self.mw = (rw + self.UCM.wallConf * self.UCM.alb_wall * rr) / fr + + # Receiving solar, including bounces (W m-2) + # Includes road covered by vegetation. + self.UCM.road.solRec = self.roadSol + \ + (1 - self.UCM.roadConf) * self.mw + + for j in range(len(self.BEM)): + self.BEM[j].roof.solRec = self.horSol + self.dif + self.BEM[j].wall.solRec = ( + self.bldSol + (1 - 2*self.UCM.wallConf)*self.mw + + self.UCM.wallConf * self.mr) + + self.rural.solRec = self.horSol + self.dif # Solar received by rural + self.UCM.SolRecRoof = self.horSol + self.dif # Solar received by roof + self.UCM.SolRecRoad = self.UCM.road.solRec # Solar received by road + # Solar received by wall + self.UCM.SolRecWall = (self.bldSol + (1 - 2 * self.UCM.wallConf) * + self.UCM.road.albedo * self.roadSol) + + # Modification from UWG_Matlab on 09/20: + # Consolidate and incorporate the treeCoverage fraction into the tree + # sensible and latent heat (W-m2) calculation. Previously this was + # factored (inconsistently) at the urbflux and UCMDef.UCModel functions. + + # Vegetation heat (tree) (per m^2 of veg) + self.UCM.treeSensHeat = ( + (1 - self.parameter.vegAlbedo) * (1 - self.parameter.treeFLat) * + self.UCM.SolRecRoad * self.UCM.treeCoverage) + self.UCM.treeLatHeat = ( + (1 - self.parameter.vegAlbedo) * self.parameter.treeFLat * + self.UCM.SolRecRoad * self.UCM.treeCoverage) + + # Modification from UWG_Matlab on 09/20: + # Add the sensible and latent heat fraction of grass (vegetation not + # accounted for by tree fraction). Note that the self.UCM.road.sens property + # also contains a calculation of sensible heat from vegetation and surface + # convection, but was not used here because the UCModel function in the + # UCMDef module already accounts for the entire road convective heat transfer + # so using the UCM.road.sens property would double-count convection. This + # sensible heat therefore just accounts for the absorbed solar radiation + # split into it's sensible heat fraction. + + # Vegetation heat (grass) (per m^2 of veg) + grasscover = self.UCM.vegcover - self.UCM.treeCoverage + self.UCM.treeSensHeat += ( + (1 - self.parameter.vegAlbedo) * (1 - self.parameter.grassFLat) * + self.UCM.SolRecRoad * grasscover) + self.UCM.treeLatHeat += ( + (1 - self.parameter.vegAlbedo) * self.parameter.grassFLat * + self.UCM.SolRecRoad * grasscover) + + else: # No Sun + + self.UCM.road.solRec = 0. + self.rural.solRec = 0. + + for j in range(len(self.BEM)): + self.BEM[j].roof.solRec = 0. + self.BEM[j].wall.solRec = 0. + + self.UCM.SolRecRoad = 0. # Solar received by road + self.UCM.SolRecRoof = 0. # Solar received by roof + self.UCM.SolRecWall = 0. # Solar received by wall + self.UCM.treeSensHeat = 0. + self.UCM.treeLatHeat = 0. + + return self.rural, self.UCM, self.BEM
    + + +
    +[docs] + def solarangles(self): + """Solves for zenith angle, tangent of zenithal angle, and critical canyon angle. + + Calculation based on NOAA from: + + * canAspect -- aspect Ratio of canyon + * simTime -- simulation time parameters + * RSM.lon -- longitude (deg) + * RSM.lat -- latitude (deg) + * RSM.GMT -- GMT hour correction + """ + + month = self.simTime.month + day = self.simTime.day + secDay = self.simTime.secDay # Total elapsed seconds in simulation + # inobis: total days for first of month + # i.e [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] + inobis = self.simTime.inobis + + canAspect = self.UCM.canAspect + lon = self.RSM.lon + lat = self.RSM.lat + GMT = self.RSM.gmt + + # Get elapsed hours on current day + self.ut = (24. + (int(secDay) / 3600. % 24.)) % 24. + ibis = list(range(len(inobis))) + + for JI in range(1, 12): + ibis[JI] = inobis[JI] + 1 + + date = day + inobis[month-1] - 1 # Julian day of the year + # divide circle by 365 days, multiply by elapsed days + hours + # ad: fractional year (radians) + self.ad = 2.0 * math.pi / 365. * (date - 1 + (self.ut - (12 / 24.))) + + self.eqtime = ( + 229.18 * (0.000075 + 0.001868 * math.cos(self.ad) - 0.032077 * + math.sin(self.ad) - 0.01461 * math.cos(2 * self.ad) - 0.040849 * + math.sin(2 * self.ad))) + + # Declination angle (angle of sun with equatorial plane) + self.decsol = ( + 0.006918 - 0.399912*math.cos(self.ad) + 0.070257*math.sin(self.ad) - + 0.006758 * math.cos(2. * self.ad) + 0.000907 * math.sin(2. * self.ad) - + 0.002697 * math.cos(3. * self.ad) + 0.00148 * math.sin(3. * self.ad)) + + time_offset = self.eqtime - 4. * lon + 60 * GMT + tst = secDay + time_offset * 60 + + ha = (tst / 4. / 60. - 180.) * math.pi / 180. + zlat = lat * (math.pi / 180.) # change angle units to radians + + # Calculate zenith solar angle + self.zenith = ( + math.acos(math.sin(zlat) * math.sin(self.decsol) + math.cos(zlat) * + math.cos(self.decsol) * math.cos(ha))) + + # tangente of solar zenithal angle + if abs(0.5 * math.pi - self.zenith) < 1e-6: + if 0.5 * math.pi - self.zenith > 0.: + self.tanzen = math.tan(0.5 * math.pi - 1e-6) + + elif 0.5 * math.pi - self.zenith <= 0.: + self.tanzen = math.tan(0.5 * math.pi + 1e-6) + + elif abs(self.zenith) < 1e-6: + # lim x->0 tan(x) -> 0 which results in division by zero error + # when calculating the critical canyon angle + # so set tanzen to 1e-6 which will result in critical canyon angle = 90 + self.tanzen = 1e-6 + + else: + self.tanzen = math.tan(self.zenith) + + # critical canyon angle for which solar radiation reaches the road + # has to do with street canyon orientation for given solar angle + self.critOrient = math.asin(min(abs(1. / self.tanzen) / canAspect, 1.))
    +
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/urbflux.html b/docs/_modules/uwg/urbflux.html new file mode 100644 index 00000000..b4287291 --- /dev/null +++ b/docs/_modules/uwg/urbflux.html @@ -0,0 +1,635 @@ + + + + + + + uwg.urbflux — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.urbflux

    +"""Function for surface heat flux calculations."""
    +from __future__ import division
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +from .infracalcs import infracalcs
    +from math import log
    +
    +
    +
    +[docs] +def urbflux(UCM, UBL, BEM, forc, parameter, simTime, RSM): + """Calculate the surface heat fluxes. + + Args: + UCM: UCMDef object. + UBL: UBLDef object. + BEM: List of BEMDef objects. + forc: Forcing object. + parameter: Param object. + simTime: SimParam object. + RSM: RSMDef object. + + Returns: + Tuple with updated UCMDef, UBLDef, and BEM objects. + """ + + T_can = UCM.canTemp + Cp = parameter.cp + UCM.Q_roof = 0. + sigma = 5.67e-8 # Stephan-Boltzman constant + UCM.roofTemp = 0. # Average urban roof temperature + UCM.wallTemp = 0. # Average urban wall temperature + + for j in range(len(BEM)): + # Building energy model + BEM[j].building.BEMCalc(UCM, BEM[j], forc, parameter, simTime) + BEM[j].ElecTotal = BEM[j].building.ElecTotal * BEM[j].fl_area # W m-2 + + # Update roof infra calc + e_roof = BEM[j].roof.emissivity + T_roof = BEM[j].roof.layerTemp[0] + BEM[j].roof.infra = e_roof * (forc.infra - sigma * T_roof ** 4.) + + # update wall infra calc (road done later) + e_wall = BEM[j].wall.emissivity + T_wall = BEM[j].wall.layerTemp[0] + # calculates the infrared radiation for wall, taking into account radiation + # exchange from road + _infra_road_, BEM[j].wall.infra = \ + infracalcs(UCM, forc, UCM.road.emissivity, e_wall, UCM.roadTemp, T_wall) + + # Update element temperatures + BEM[j].mass.layerTemp = \ + BEM[j].mass.Conduction( + simTime.dt, BEM[j].building.fluxMass, 1., 0., BEM[j].building.fluxMass) + BEM[j].roof.SurfFlux( + forc, parameter, simTime, UCM.canHum, T_can, max(forc.wind, UCM.canWind), 1., + BEM[j].building.fluxRoof) + BEM[j].wall.SurfFlux( + forc, parameter, simTime, UCM.canHum, T_can, UCM.canWind, 1., + BEM[j].building.fluxWall) + + # Note the average wall & roof temperature + UCM.wallTemp = UCM.wallTemp + BEM[j].frac * BEM[j].wall.layerTemp[0] + UCM.roofTemp = UCM.roofTemp + BEM[j].frac * BEM[j].roof.layerTemp[0] + + # Update road infra calc (assume walls have similar emissivity, so use the last one) + UCM.road.infra, _wall_infra = \ + infracalcs(UCM, forc, UCM.road.emissivity, e_wall, UCM.roadTemp, UCM.wallTemp) + UCM.road.SurfFlux(forc, parameter, simTime, UCM.canHum, T_can, UCM.canWind, 2., 0.) + UCM.roadTemp = UCM.road.layerTemp[0] + + # Sensible & latent heat flux (total) + try: + UCM.latHeat += \ + UCM.latAnthrop + UCM.treeLatHeat + UCM.road.lat * (1. - UCM.bldDensity) + except TypeError: + pass # latheat is None + + # --------------------------------------------------------------------- + # Advective heat flux to UBL from VDM + # + # Note: UWG_Matlab code here is modified to compensate for rounding errors + # that occur when recursively adding forDens, intAdv1, and intAdv2. + # This causes issues in the UBL.advHeat calculation when large (1e5) + # numbers are subtracted to produce small numbers (1e-10) that can + # differ from equivalent matlab calculations by a factor of 2. + # Values this small are ~ 0, but for consistency's sake Kahan Summation + # algorithm is applied to keep margin of difference from UWG_Matlab low. + # --------------------------------------------------------------------- + + forDens = 0.0 + intAdv1 = 0.0 + intAdv2 = 0.0 + + # c1 & c2 stores values truncated by floating point rounding for values < 10^-16 + c1 = 0.0 + c2 = 0.0 + c3 = 0.0 + + for iz in range(RSM.nzfor): + # At c loss of precision at at low order of magnitude, that we need in + # UBL.advHeat calc. Algebraically t is 0, but with floating pt numbers + # c will accumulate truncated values + y = (RSM.densityProfC[iz] * RSM.dz[iz] / (RSM.z[RSM.nzfor - 1] + + RSM.dz[RSM.nzfor-1] / 2.)) + t = forDens + y + c1 += (t - forDens) - y + forDens = t + + y = RSM.windProf[iz] * RSM.tempProf[iz] * RSM.dz[iz] + t = intAdv1 + y + c2 += (t - intAdv1) - y + intAdv1 = t + + y = RSM.windProf[iz] * RSM.dz[iz] + t = intAdv2 + y + c3 += (t - intAdv2) - y + intAdv2 = t + + # Add the truncated values back + forDens -= c1 + intAdv1 -= c2 + intAdv2 -= c3 + UBL.advHeat = ( + UBL.paralLength * Cp * forDens * (intAdv1 - (UBL.ublTemp * intAdv2)) / + UBL.urbArea) + + # --------------------------------------------------------------------- + # Convective heat flux to UBL from UCM (see Appendix - Bueno (2014)) + # --------------------------------------------------------------------- + zrUrb = 2 * UCM.bldHeight + zref = RSM.z[RSM.nzref-1] # Reference height + + # Reference wind speed & canyon air density + windUrb = ( + forc.wind*log(zref / RSM.z0r) / log(parameter.windHeight / RSM.z0r) * + log(zrUrb / UCM.z0u) / log(zref / UCM.z0u)) + dens = forc.pres / (1000 * 0.287042 * T_can * (1. + 1.607858 * UCM.canHum)) + + # Friction velocity + UCM.ustar = parameter.vk * windUrb / log((zrUrb - UCM.l_disp) / UCM.z0u) + + # Convective scaling velocity + wstar = (parameter.g * max(UCM.sensHeat, 0.0) * zref / dens / Cp / T_can) ** (1 / 3.) + UCM.ustarMod = max(UCM.ustar, wstar) # Modified friction velocity + UCM.uExch = parameter.exCoeff * UCM.ustarMod # Exchange velocity + + # Canyon wind speed, Eq. 27 Chp. 3 Hanna and Britter, 2002 + # assuming CD = 1 and lambda_f = verToHor/4 + UCM.canWind = UCM.ustarMod * (UCM.verToHor / 8.) ** (-1 / 2.) + + # Canyon turbulent velocities + UCM.turbU = 2.4 * UCM.ustarMod + UCM.turbV = 1.9 * UCM.ustarMod + UCM.turbW = 1.3 * UCM.ustarMod + + # Urban wind profile + for iz in range(RSM.nzref): + UCM.windProf.append( + UCM.ustar / parameter.vk * log((RSM.z[iz] + UCM.bldHeight - UCM.l_disp) / + UCM.z0u)) + + return UCM, UBL, BEM
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/utilities.html b/docs/_modules/uwg/utilities.html new file mode 100644 index 00000000..fb9827aa --- /dev/null +++ b/docs/_modules/uwg/utilities.html @@ -0,0 +1,636 @@ + + + + + + + uwg.utilities — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.utilities

    +"""Collection of useful methods."""
    +from csv import reader as csv_reader
    +import sys
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +
    +try:
    +    import math
    +    INFPOS = math.inf
    +    INFNEG = -1 * math.inf
    +except AttributeError:
    +    # python 2
    +    INFPOS = float('inf')
    +    INFNEG = float('-inf')
    +
    +
    +# DOE References
    +REF_BLDTYPE = ('fullservicerestaurant', 'hospital', 'largehotel', 'largeoffice',
    +               'medoffice', 'midriseapartment', 'outpatient', 'primaryschool',
    +               'quickservicerestaurant', 'secondaryschool', 'smallhotel',
    +               'smalloffice', 'standaloneretail', 'stripmall', 'supermarket',
    +               'warehouse')
    +REF_BUILTERA = ('pre80', 'pst80', 'new')
    +REF_ZONETYPE = ('1A', '2A', '2B', '3A', '3B-CA', '3B', '3C', '4A', '4B', '4C', '5A',
    +                '5B', '6A', '6B', '7', '8')
    +REF_BLDTYPE_SET = {'fullservicerestaurant', 'hospital', 'largehotel', 'largeoffice',
    +                   'medoffice', 'midriseapartment', 'outpatient', 'primaryschool',
    +                   'quickservicerestaurant', 'secondaryschool', 'smallhotel',
    +                   'smalloffice', 'standaloneretail', 'stripmall', 'supermarket',
    +                   'warehouse'}
    +REF_ZONETYPE_SET = {'1A', '1B', '2A', '2B', '3A', '3B-CA', '3B', '3C', '4A', '4B', '4C',
    +                    '5A', '5B', '5C', '6A', '6B', '7', '8'}
    +REF_BUILTERA_SET = {'pre80', 'pst80', 'new'}
    +
    +
    +
    +[docs] +def is_near_zero(num, eps=1e-10): + return abs(float(num)) < eps
    + + + +
    +[docs] +def read_csv(file_path): + """Open csv file and read. + + Args: + file_path: Text string for file path. + + Returns: + List of file lines as str type. + """ + if sys.version_info[0] >= 3: + file_ = open(file_path, "r", errors='ignore') + else: + file_ = open(file_path, "r") + + gen_ = csv_reader(file_, delimiter=",") + L = [r for r in gen_] + file_.close() + return L
    + + + +
    +[docs] +def str2fl(x): + """Recurses through lists and converts lists of string to float + + Args: + x: string or list of strings + """ + def helper_to_fl(s_): + """Deals with odd string imports converts to float""" + if s_ == "": + return "null" + elif "," in s_: + s_ = s_.replace(",", "") + + try: + return float(s_) + except (ValueError, TypeError): + return (s_) + + fl_lst = [] + if isinstance(x[0], str): + # Check if list of strings then conversion + for xi in range(len(x)): + fl_lst.append(helper_to_fl(x[xi])) + elif isinstance(x[0], list): + # Check if list of lists, then recurse + for xi in range(len(x)): + fl_lst.append(str2fl(x[xi])) + else: + return False + + return fl_lst
    + + + +
    +[docs] +def float_in_range(value, mi=INFNEG, ma=INFPOS, input_name=''): + """Check a float value to be between minimum and maximum.""" + assert mi <= value <= ma, 'Input number {} must be between {} and {}. ' \ + 'Got {}'.format(input_name, mi, ma, value) + return value
    + + + +
    +[docs] +def float_in_range_excl(value, mi=INFNEG, ma=INFPOS, input_name=''): + """Check a float value to be greater than minimum and less than maximum.""" + assert mi < value < ma, 'Input number {} must be greater than {} ' \ + 'and less than {}. Got {}'.format(input_name, mi, ma, value) + return value
    + + + +
    +[docs] +def float_in_range_excl_incl(value, mi=INFNEG, ma=INFPOS, input_name=''): + """Check a float value to be greater than minimum and less than/equal to maximum.""" + assert mi < value <= ma, 'Input number {} must be greater than {} and less than ' \ + 'or equal to {}. Got {}'.format(input_name, mi, ma, value) + return value
    + + + +
    +[docs] +def float_in_range_incl_excl(value, mi=INFNEG, ma=INFPOS, input_name=''): + """Check a float value to be greater than/equal to minimum and less than maximum.""" + assert mi <= value < ma, 'Input number {} must be greater than or equal to {} ' \ + 'and less than {}. Got {}'.format(input_name, mi, ma, value) + return value
    + + + +
    +[docs] +def int_in_range(value, mi=INFNEG, ma=INFPOS, input_name=''): + """Check an integer value to be between minimum and maximum.""" + number = int(value) + assert mi <= number <= ma, 'Input integer {} must be between {} and {}. ' \ + 'Got {}.'.format(input_name, mi, ma, value) + return number
    + + + +
    +[docs] +def float_positive(value, input_name=''): + """Check a float value to be positive.""" + return float_in_range(value, 0, INFPOS, input_name)
    + + + +
    +[docs] +def int_positive(value, input_name=''): + """Check if an integer value is positive.""" + return int_in_range(value, 0, INFPOS, input_name)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/uwg.html b/docs/_modules/uwg/uwg.html new file mode 100644 index 00000000..87447e86 --- /dev/null +++ b/docs/_modules/uwg/uwg.html @@ -0,0 +1,2469 @@ + + + + + + + uwg.uwg — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.uwg

    +"""Urban Weather Generator (UWG) Version 4.2
    +
    +Original Author: B. Bueno[1]
    +Edited by A. Nakano & Lingfu Zhang
    +Modified by Joseph Yang (joeyang@mit.edu) - May, 2016
    +Translated to Python by Saeran Vasanthakumar - February, 2018
    +
    +Note:
    +    [1] Bueno, Bruno; Norford, Leslie; Hidalgo, Julia; Pigeon, Gregoire (2012a).
    +    The urban weather generator, Journal of Building Performance Simulation. 6:4,269-281.
    +    doi: 10.1080/19401493.2012.718797
    +"""
    +
    +from __future__ import division, print_function
    +from functools import reduce
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +try:
    +    str = basestring
    +except NameError:
    +    pass
    +
    +import sys
    +import os
    +import math
    +import copy
    +
    +try:
    +    import cPickle as pickle
    +except ImportError:
    +    import pickle
    +
    +from .simparam import SimParam
    +from .weather import Weather
    +from .material import Material
    +from .element import Element
    +from .param import Param
    +from .UCMDef import UCMDef
    +from .forcing import Forcing
    +from .UBLDef import UBLDef
    +from .RSMDef import RSMDef
    +from .solarcalcs import SolarCalcs
    +from .psychrometrics import psychrometrics
    +from .urbflux import urbflux
    +from .schdef import SchDef
    +from .BEMDef import BEMDef
    +from . import utilities
    +from .utilities import int_in_range, float_in_range, int_positive, float_positive
    +from .utilities import REF_BLDTYPE, REF_BUILTERA, REF_ZONETYPE, REF_BLDTYPE_SET, \
    +    REF_BUILTERA_SET, REF_ZONETYPE_SET
    +
    +
    +
    +[docs] +class UWG(object): + """Morph a rural EPW file to urban conditions based on defined urban parameters. + + Args: + epw_path: Text string for full path of the rural .epw file that will be + morphed. If set to None, other input parameters can be assigned but the UWG + model cannot be generated from the inputs, which is useful in cases where a + UWG model needs to be serialized but the file path structure is not known. + (Default: None). + new_epw_dir: Optional text string for the destination directory into which the + morphed .epw file is written. If None the morphed file will be written into + the same directory as the rural .epw file. (Default: None). + new_epw_name: Optional text string for the destination file name of the morphed + .epw file. If None the morphed file will append '_UWG' to the original file + name. (Default: None). + + Properties: + * epw_path -- Full path of the rural .epw file that will be morphed. + * new_epw_path -- Full path of the file name of the morphed .epw file. + * refBEM -- Reference BEMDef matrix defined by built type, era, and zone. + * refSchedule -- Reference SchDef matrix defined by built type, era, and zone. + * month -- Number (1-12) representing simulation start month. + * day -- Number (1-31) representing simulation start day. + * nday -- Number of days to simulate. + * dtsim -- Simlation time step in seconds. + * dtweather -- Number for weather data time-step in seconds. + * autosize -- Boolean to set HVAC autosize. + * sensocc -- Sensible heat from occupant [W]. + * latfocc -- Latent heat fraction from occupant. + * radfocc -- Radiant heat fraction from occupant. + * radfequip -- Radiant heat fraction from equipment. + * radflight -- Radiant heat fraction from electric light. + * h_ubl1 -- Daytime urban boundary layer height in meters. + * h_ubl2 -- Nighttime urban boundary layer height in meters. + * h_ref -- Inversion height in meters. + * h_temp -- Temperature height in meters. + * h_wind -- Wind height in meters. + * c_circ -- Wind scaling coefficient. + * c_exch -- Exchange velocity coefficient. + * maxday -- Maximum heat flux threshold for daytime conditions [W/m2]. + * maxnight -- Maximum heat flux threshold for nighttime conditions [W/m2]. + * windmin -- Minimum wind speed in m/s. + * h_obs -- Rural average obstacle height in meters. + * bldheight -- Urban building height in meters. + * h_mix -- Fraction of HVAC waste heat released to street canyon. + * blddensity -- Building footprint density as fraction of urban area. + * vertohor -- Vertical-to-horizontal urban area ratio. + * charlength -- Urban characteristic length in meters. + * albroad -- Urban road albedo. + * droad -- Thickness of urban road pavement thickness in meters. + * sensanth -- Street level anthropogenic sensible heat [W/m2]. + * zone -- Index representing an ASHRAE climate zone. + * grasscover -- Fraction of urban ground covered in grass only. + * treecover -- Fraction of urban ground covered in trees. + * vegstart -- Month in which vegetation starts to evapotranspire. + * vegend -- Month in which vegetation stops evapotranspiration. + * albveg -- Vegetation albedo. + * rurvegcover -- Fraction of rural ground covered by vegetation. + * latgrss -- Fraction of latent heat absorbed by urban grass. + * lattree -- Fraction latent heat absorbed by urban trees. + * schtraffic -- Schedule of fractional anthropogenic heat load. + * kroad -- Road pavement conductivity [W/m-K]. + * croad -- Road pavement volumetric heat capacity [J/m^3K]. + * bld -- Matrix of numbers representing fraction of urban building stock. + * albroof -- Average building roof albedo. + * vegroof -- Fraction of roof covered in grass/shrubs. + * glzr -- Building glazing ratio. + * albwall -- Building albedo. + * shgc -- Building glazing Solar Heat Gain Coefficient (SHGC). + * flr_h -- Building floor height in meters. + * ref_bem_vector -- List of custom BEMDef objects to override the refBEM. + * ref_sch_vector -- List of custom SchDef objects to override the refSchedule. + """ + + # Definitions for constants / other parameters + MINTHICKNESS = 0.01 # Minimum layer thickness (to prevent crashing) (m) + MAXTHICKNESS = 0.05 # Maximum layer thickness (m) + # http://web.mit.edu/parmstr/Public/NRCan/nrcc29118.pdf (Figly & Snodgrass) + SOILTCOND = 1 + # http://www.europment.org/library/2013/venice/bypaper/MFHEEF/MFHEEF-21.pdf + # (average taken from Table 1) + SOILVOLHEAT = 2e6 + # Soil material used for soil-depth padding + SOIL = Material(SOILTCOND, SOILVOLHEAT, name='soil') + # Physical constants + G = 9.81 # gravity (m s-2) + CP = 1004. # heat capacity for air (J/kg K) + VK = 0.40 # von karman constant (dimensionless) + R = 287. # gas constant dry air (J/kg K) + RV = 461.5 # gas constant water vapor (J/kg K) + LV = 2.26e6 # latent heat of evaporation (J/kg) + SIGMA = 5.67e-08 # Stefan Boltzmann constant (W m-2 K-4) + WATERDENS = 1000. # water density (kg m-3) + LVTT = 2.5008e6 # + TT = 273.16 # + ESTT = 611.14 # + CL = 4.218e3 # + CPV = 1846.1 # + B = 9.4 # Coefficients derived by Louis (1979) + CM = 7.4 # + # (Pr/Sc)^(2/3) for Colburn analogy in water evaporation + COLBURN = math.pow((0.713 / 0.621), (2 / 3.)) + # Site-specific parameters + WGMAX = 0.005 # maximum film water depth on horizontal surfaces (m) + + # UWG object constants + PARAMETER_LIST = ('month', 'day', 'nday', 'dtsim', 'dtweather', 'autosize', + 'sensocc', 'latfocc', 'radfocc', 'radfequip', 'radflight', + 'h_ubl1', 'h_ubl2', 'h_ref', 'h_temp', 'h_wind', 'c_circ', + 'c_exch', 'maxday', 'maxnight', 'windmin', 'h_obs', 'bldheight', + 'h_mix', 'blddensity', 'vertohor', 'charlength', 'albroad', + 'droad', 'sensanth', 'zone', 'grasscover', 'treecover', + 'vegstart', 'vegend', 'albveg', 'rurvegcover', 'latgrss', + 'lattree', 'schtraffic', 'kroad', 'croad', 'bld', 'shgc', + 'albroof', 'glzr', 'vegroof', 'albwall', 'flr_h') + OPTIONAL_PARAMETER_SET = {'shgc', 'albroof', + 'glzr', 'vegroof', 'albwall', 'flr_h'} + DEFAULT_BLD = (('largeoffice', 'pst80', 0.4), + ('midriseapartment', 'pst80', 0.6)) + DEFAULT_SCHTRAFFIC = ( + (0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.7, 0.9, 0.9, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.8, + 0.9, 0.9, 0.8, 0.8, 0.7, 0.3, 0.2, 0.2), # Weekday + (0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.6, 0.7, + 0.7, 0.7, 0.7, 0.5, 0.4, 0.3, 0.2, 0.2), # Saturday + (0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, + 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.2, 0.2)) # Sunday + + # Constant file paths + CURRENT_PATH = os.path.abspath(os.path.dirname(__file__)) + Z_MESO_PATH = os.path.join(CURRENT_PATH, 'refdata', 'z_meso.txt') + REFDOE_PATH = os.path.join(CURRENT_PATH, 'refdata', 'readDOE.pkl') + + def __init__(self, epw_path=None, new_epw_dir=None, new_epw_name=None): + + self.epw_path = epw_path + self._new_epw_dir, self._new_epw_name = new_epw_dir, new_epw_name + self._new_epw_path = None + + # set defaults for reference data + self._refBEM = None + self._refSchedule = None + self._ref_bem_vector = None + self._ref_sch_vector = None + + # Parameters for UWG computation + self.epw_precision = 1 + + # Set default for optional parameters as None, if user doesn't modify + # use DOE reference equivalents. + self._shgc = None + self._flr_h = None + self._albroof = None + self._albwall = None + self._glzr = None + self._vegroof = None + + # Empty latanth not used. + self.latanth = None + +
    +[docs] + @classmethod + def from_param_file(cls, param_path, epw_path=None, new_epw_dir=None, + new_epw_name=None): + """Create a UWG object from the .uwg parameter file. + + Note: this method of initializing the UWG object doesn't permit adding custom + reference data. + + Args: + param_path: Optional text string for full path of the the .uwg parameter file + path. + epw_path: Text string for full path of the rural .epw file that will be + morphed. If set to None, other input parameters can be assigned but the + UWG model cannot be generated from the inputs, which is useful in cases + where a UWG model needs to be serialized but the file path structure is + not known. (Default: None). + new_epw_dir: Optional text string destination directory for the morphed + .epw file. If None the morphed file will be written into the same + directory as the rural .epw file. (Default: None). + new_epw_name: Optional destination file name for the morphed .epw file. + If None the morphed file will append '_UWG' to the original file name. + (Default: None). + """ + + assert os.path.exists(param_path), 'Parameter file "{}" does not ' \ + 'exist.'.format(param_path) + + assert param_path.endswith('.uwg'), 'Parameter file must be a ".uwg" ' \ + 'filetype. Got: {}.'.format(param_path) + + model = UWG(epw_path, new_epw_dir, new_epw_name) + model._read_input(param_path) + return model
    + + +
    +[docs] + @classmethod + def from_param_args(cls, bldheight, blddensity, vertohor, grasscover, + treecover, zone, month=1, day=1, nday=31, dtsim=300, + dtweather=3600, bld=DEFAULT_BLD, autosize=False, + h_mix=1, sensocc=100, latfocc=0.3, radfocc=0.2, radfequip=0.5, + radflight=0.7, charlength=1000, albroad=0.1, + droad=0.5, kroad=1, croad=1600000, rurvegcover=0.9, vegstart=4, vegend=10, + albveg=0.25, latgrss=0.4, lattree=0.6, sensanth=20, + schtraffic=DEFAULT_SCHTRAFFIC, h_ubl1=1000, h_ubl2=80, h_ref=150, + h_temp=2, h_wind=10, c_circ=1.2, c_exch=1, maxday=150, + maxnight=20, windmin=1, h_obs=0.1, epw_path=None, + new_epw_dir=None, new_epw_name=None, ref_bem_vector=None, + ref_sch_vector=None): + """Create an UWG object based on default method arguments. + + The default parameters are set from example parameters defined by Bueno et al. + (2012a)[1] for Singapore. The original file can be accessed here: + https://github.com/ladybug-tools/uwg/blob/master/resources/initialize_singapore.uwg. + + Note: + [1] Bueno, Bruno; Norford, Leslie; Hidalgo, Julia; Pigeon, Gregoire (2012a). + The urban weather generator, Journal of Building Performance Simulation. 6:4, + 269-281. doi: 10.1080/19401493.2012.718797 + """ + + model = UWG(epw_path, new_epw_dir, new_epw_name) + + model.bldheight = bldheight + model.blddensity = blddensity + model.vertohor = vertohor + model.zone = zone + model.month = month + model.day = day + model.nday = nday + model.dtsim = dtsim + model.dtweather = dtweather + model.autosize = autosize + model.h_mix = h_mix + model.sensocc = sensocc + model.latfocc = latfocc + model.radfocc = radfocc + model.radfequip = radfequip + model.radflight = radflight + model.bld = bld + model.charlength = charlength + model.albroad = albroad + model.droad = droad + model.sensanth = sensanth + model.kroad = kroad + model.croad = croad + model.treecover = treecover + model.grasscover = grasscover + model.vegstart = vegstart + model.vegend = vegend + model.albveg = albveg + model.rurvegcover = rurvegcover + model.latgrss = latgrss + model.lattree = lattree + model.schtraffic = schtraffic + model.h_ubl1 = h_ubl1 + model.h_ubl2 = h_ubl2 + model.h_ref = h_ref + model.h_temp = h_temp + model.h_wind = h_wind + model.c_circ = c_circ + model.c_exch = c_exch + model.maxday = maxday + model.maxnight = maxnight + model.windmin = windmin + model.h_obs = h_obs + + # check and add reference data + refcheck = int(ref_sch_vector is not None) + \ + int(ref_bem_vector is not None) + assert refcheck != 1, 'The ref_sch_vector and ref_bem_vector must both be ' \ + 'defined in order to modify the UWG reference data. Only {} is ' \ + 'defined.'.format( + 'ref_sch_vector' if ref_bem_vector is None else 'ref_bem_vector') + + if refcheck == 2: + model.ref_bem_vector, model.ref_sch_vector = \ + model._check_reference_data(ref_bem_vector, ref_sch_vector) + + return model
    + + +
    +[docs] + @classmethod + def from_dict(cls, data, epw_path=None, new_epw_dir=None, new_epw_name=None): + """Create an UWG object from a dictionary. + + Args: + data: An UWG dictionary following the format below. Note that + this example has been truncated for the sake of brevity. For + the full list of required properties in the UWG, see the + initialization docstrings. + epw_path: Text string for full path of the rural .epw file that will be + morphed. If set to None, other input parameters can be assigned but the + UWG model cannot be generated from the inputs, which is useful in cases + where a UWG model needs to be serialized but the file path structure is + not known. (Default: None). + new_epw_dir: Optional text string for the destination directory into which + the morphed .epw file is written. If None the morphed file will be + written into the same directory as the rural .epw file. (Default: None). + new_epw_name: Optional text string for the destination file name of the + morphed .epw file. If None the morphed file will append '_UWG' to the + original file name. (Default: None). + + .. code-block:: python + + { + "type": "UWG", + "bldheight": 10, + "blddensity": 0.5, + "vertohor": 0.8, + ... + "h_obs": 0.1, + "flr_h": 3.5, + "shgc": None, + # Optional vector of SchDef dictionary. + "ref_sch_vector": [sch.to_dict()] + # Optional vector of BEMDef dictionary. + "ref_bem_vector": [bem.to_dict()] + } + """ + assert data['type'] == 'UWG', \ + 'Expected UWG dictionary. Got {}.'.format(data['type']) + + model = UWG(epw_path, new_epw_dir, new_epw_name) + + # set UWG parameters + for attr in cls.PARAMETER_LIST: + setattr(model, attr, data[attr]) + + # check and add reference data + check_sch = 'ref_sch_vector' in data and data['ref_sch_vector'] is not None + check_bem = 'ref_bem_vector' in data and data['ref_bem_vector'] is not None + refcheck = int(check_sch) + int(check_bem) + assert refcheck != 1, 'The ref_sch_vector and ref_bem_vector ' \ + 'properties must both be defined in order to modify the UWG reference ' \ + 'data. Only {} is defined.'.format( + 'ref_sch_vector' if 'ref_sch_vector' in data else 'ref_bem_vector') + + if refcheck == 2: + ref_sch_vector = [SchDef.from_dict(schdict) + for schdict in data['ref_sch_vector']] + ref_bem_vector = [BEMDef.from_dict(bemdict) + for bemdict in data['ref_bem_vector']] + + if refcheck == 2: + model.ref_bem_vector, model.ref_sch_vector = \ + model._check_reference_data(ref_bem_vector, ref_sch_vector) + + return model
    + + + @property + def epw_path(self): + """Get full path to rural .epw file to be morphed.""" + return self._epw_path + + @epw_path.setter + def epw_path(self, value): + if value is not None: + assert os.path.exists( + value), 'File: "{}" does not exist.'.format(value) + self._epw_path = value + + @property + def new_epw_path(self): + """Get text string for new epw filepath.""" + if self._new_epw_path is None: + if self._new_epw_dir is None or self._new_epw_name is None: + epw_dir, epw_name = os.path.split(self.epw_path) + if self._new_epw_dir is None: + self._new_epw_dir = epw_dir + if self._new_epw_name is None: + nepw_name = epw_name + if nepw_name.lower().endswith('.epw'): + nepw_name = nepw_name[:-4] + self._new_epw_name = nepw_name + '_UWG.epw' + self._new_epw_path = os.path.join( + self._new_epw_dir, self._new_epw_name) + return self._new_epw_path + + @property + def refBEM(self): + """Get matrix of DOE reference BEMDefs defined by built type, era, and zone.""" + if self._refBEM is None: + self._refBEM, self._refSchedule = UWG.load_refDOE() + return self._refBEM + + @property + def refSchedule(self): + """Get matrix of DOE reference SchDefs defined by built type, era, and zone.""" + if self._refSchedule is None: + self._refBEM, self._refSchedule = UWG.load_refDOE() + return self._refSchedule + + @property + def month(self): + """Get or set number (1-12) as simulation start month.""" + return self._month + + @month.setter + def month(self, value): + self._month = int_in_range(value, 1, 12, 'month') + + @property + def day(self): + """Get or set number (1-31) as simulation start day.""" + return self._day + + @day.setter + def day(self, value): + self._day = int_in_range(value, 1, 31, 'day') + + @property + def nday(self): + """Get or set number of days to simulate.""" + return self._nday + + @nday.setter + def nday(self, value): + self._nday = int_positive(value, 'nday') + + @property + def dtsim(self): + """Get or set simulation timestep in seconds.""" + return self._dtsim + + @dtsim.setter + def dtsim(self, value): + self._dtsim = int_positive(value, 'dtsim') + + @property + def dtweather(self): + """Get or set weather data timestep in seconds.""" + return self._dtweather + + @dtweather.setter + def dtweather(self, value): + self._dtweather = float_positive(value, 'dtweather') + + @property + def autosize(self): + """Get or set boolean to autosize HVAC system.""" + return self._autosize + + @autosize.setter + def autosize(self, value): + assert isinstance(value, (bool, int, float)), 'Input autosize must be a ' \ + 'boolean value or a number that can be cast as or boolean value. ' \ + 'Got: {}.'.format(value) + self._autosize = bool(value) + + @property + def sensocc(self): + """Get or set sensible heat from occupant [W].""" + return self._sensocc + + @sensocc.setter + def sensocc(self, value): + self._sensocc = float_positive(value, 'sensocc') + + @property + def latfocc(self): + """Get or set latent heat fraction from occupant.""" + return self._latfocc + + @latfocc.setter + def latfocc(self, value): + self._latfocc = float_in_range(value, 0, 1, 'latfocc') + + @property + def radfocc(self): + """Get or set radiant heat fraction from occupant.""" + return self._radfocc + + @radfocc.setter + def radfocc(self, value): + self._radfocc = float_in_range(value, 0, 1, 'radfocc') + + @property + def radfequip(self): + """Get or set radiant heat fraction from equipment.""" + return self._radfequip + + @radfequip.setter + def radfequip(self, value): + self._radfequip = float_in_range(value, 0, 1, 'radfequip') + + @property + def radflight(self): + """Get or set radiant heat fraction from electric light.""" + return self._radflight + + @radflight.setter + def radflight(self, value): + self._radflight = float_in_range(value, 0, 1, 'radflight') + + @property + def h_ubl1(self): + """Get or set daytime urban boundary layer height in meters.""" + return self._h_ubl1 + + @h_ubl1.setter + def h_ubl1(self, value): + self._h_ubl1 = float_positive(value, 'h_ubl1') + + @property + def h_ubl2(self): + """Get or set nighttime urban boundary layer height in meters.""" + return self._h_ubl2 + + @h_ubl2.setter + def h_ubl2(self, value): + self._h_ubl2 = float_positive(value, 'h_ubl2') + + @property + def h_ref(self): + """Get or set inversion height in meters.""" + return self._h_ref + + @h_ref.setter + def h_ref(self, value): + self._h_ref = float_positive(value, 'h_ref') + + @property + def h_temp(self): + """Get or set temperature height in meters.""" + return self._h_temp + + @h_temp.setter + def h_temp(self, value): + self._h_temp = float_positive(value, 'h_temp') + + @property + def h_wind(self): + """Get or set wind height in meters.""" + return self._h_wind + + @h_wind.setter + def h_wind(self, value): + self._h_wind = float_positive(value, 'h_wind') + + @property + def c_circ(self): + """Get or set wind scaling coefficient.""" + return self._c_circ + + @c_circ.setter + def c_circ(self, value): + self._c_circ = float_positive(value, 'c_circ') + + @property + def c_exch(self): + """Get or set exchange velocity coefficient.""" + return self._c_exch + + @c_exch.setter + def c_exch(self, value): + self._c_exch = float_positive(value, 'c_exch') + + @property + def maxday(self): + """Get or set maximum heat flux threshold for daytime conditions [W/m].""" + return self._maxday + + @maxday.setter + def maxday(self, value): + self._maxday = float_positive(value, 'maxday') + + @property + def maxnight(self): + """Get or set maximum heat flux threshold for nighttime conditions [W/m2].""" + return self._maxnight + + @maxnight.setter + def maxnight(self, value): + self._maxnight = float_positive(value, 'maxnight') + + @property + def windmin(self): + """Get or set minimum wind speed in m/s.""" + return self._windmin + + @windmin.setter + def windmin(self, value): + self._windmin = float_positive(value, 'windmin') + + @property + def h_obs(self): + """Get or set rural average obstacle height in meters.""" + return self._h_obs + + @h_obs.setter + def h_obs(self, value): + self._h_obs = float_positive(value, 'h_obs') + + @property + def bldheight(self): + """Get or set average urban building height in meters.""" + return self._bldheight + + @bldheight.setter + def bldheight(self, value): + self._bldheight = float_positive(value, 'bldheight') + + @property + def h_mix(self): + """Get or set fraction of building HVAC waste heat released to street canyon. + + It is assumed the rest of building HVAC waste heat is released from the roof. + """ + return self._h_mix + + @h_mix.setter + def h_mix(self, value): + self._h_mix = float_in_range(value, 0, 1, 'h_mix') + + @property + def vertohor(self): + """Get or set vertical-to-horizontal urban area ratio. + + The vertical-to-horizontal urban area ratio is calculated by dividing the + urban facade area by total urban area. + """ + return self._vertohor + + @vertohor.setter + def vertohor(self, value): + self._vertohor = float_positive(value, 'vertohor') + + @property + def charlength(self): + """Get or set the urban characteristic length in meters. + + The characteristic length is the dimension of a square that encompasses the + whole neighborhood. + """ + return self._charlength + + @charlength.setter + def charlength(self, value): + self._charlength = float_positive(value, 'charlength') + + @property + def albroad(self): + """Get or set urban road albedo.""" + return self._albroad + + @albroad.setter + def albroad(self, value): + self._albroad = float_in_range(value, 0, 1, 'albroad') + + @property + def droad(self): + """Get or set thickness of urban road pavement thickness in meters.""" + return self._droad + + @droad.setter + def droad(self, value): + self._droad = float_positive(value, 'droad') + + @property + def sensanth(self): + """Get or set street level anthropogenic sensible heat [W/m2]. + + Street level anthropogenic heat is non-building heat like heat emitted from cars, + pedestrians, and street cooking. + """ + return self._sensanth + + @sensanth.setter + def sensanth(self, value): + self._sensanth = float_positive(value, 'sensanth') + + @property + def bld(self): + """Get or set list of building types, eras, and fractions of urban building stock. + + This property consists of a list of tuples, each containing a string for the the + built era, and a number between 0 and 1, inclusive, defining built stock + fraction, i.e ('LargeOffice', 'New', 0.4). The fractions should sum to one. + + 768 predefined models are built referencing 16 building types for 3 built eras + and 16 climate zones according to models from the Department of Energy (DOE). + Choose from the following text identifiers to reference a DOE building type: + + * 'fullservicerestaurant' + * 'hospital' + * 'largehotel' + * 'largeoffice' + * 'medoffice' + * 'midriseapartment' + * 'outpatient' + * 'primaryschool' + * 'quickservicerestaurant' + * 'secondaryschool' + * 'smallhotel' + * 'smalloffice' + * 'standaloneretail' + * 'stripmall' + * 'supermarket' + * 'warehouse' + + Choose from the following built eras: + + * 'pre80' + * 'pst80' + * 'new' + + Custom building types can also be referenced in this property. For example, a + built stock consisting of 40% post-1980's large office, 30% new midrise + apartment, and 30% of a pre-1980s custom building type (defined by the user) + is referenced as follows: + + .. code-block:: python + + bld = [('largeoffice', 'pst80', 0.4), + ('midriseapartment', 'new', 0.3), + ('custombuilding', 'pre80', 0.3)] + """ + return self._bld + + @bld.setter + def bld(self, value): + + assert isinstance(value, (list, tuple)), 'The bld property must be a list. ' \ + 'Got {}.'.format(value) + + # check values and fraction sum. + total_frac = 0.0 + for bld_row in value: + assert len(bld_row) == 3, 'Each bld tuple must contain three ' \ + 'items defining building type, era and fraction. Got ' \ + '{} values.'.format(len(bld_row)) + + bldtype, builtera, frac = \ + bld_row[0], bld_row[1], bld_row[2] + assert isinstance(bldtype, str), 'The first item in the ' \ + 'bld tuple must be text defining the reference building ' \ + 'type. Got: {}.'.format(bldtype) + assert isinstance(builtera, str) and builtera.lower() in REF_BUILTERA_SET, \ + 'The second item in the bld tuple must be text defining the built ' \ + 'era as one of {}. Got: {}.'.format( + REF_BUILTERA, builtera.lower()) + assert 0.0 <= frac <= 1.0, 'The third item in the bld tuple ' \ + 'must be a value between 0 and 1, inclusive, defining the ' \ + 'fraction of total built stock. Got: {}.'.format(frac) + total_frac += frac + + assert abs(total_frac - 1.0) < 1e-2, 'The sum of reference building ' \ + 'fractions defined in bld must equal one. Got: {}.'.format( + total_frac) + + self._bld = value + + @property + def lattree(self): + """Get or set fraction of latent heat absorbed by urban trees.""" + return self._lattree + + @lattree.setter + def lattree(self, value): + self._lattree = float_in_range(value, 0, 1, 'lattree') + + @property + def latgrss(self): + """Get or set fraction of latent heat absorbed by urban grass.""" + return self._latgrss + + @latgrss.setter + def latgrss(self, value): + self._latgrss = float_in_range(value, 0, 1, 'latgrss') + + @property + def zone(self): + """Get or set text representing an ASHRAE climate zone. + + This value is used to specify climate zone-specific construction, and + HVAC parameters for the DOE reference building types. This will not effect + the simulation if only custom reference buildings are used. + + Choose from the following: + + * '1A' - (i.e Miami) + * '1B' - (i.e Kuwait) + * '2A' - (i.e Houston) + * '2B' - (i.e Phoenix) + * '3A' - (i.e Atlanta) + * '3B-CA' - (i.e Los Angeles) + * '3B' - (i.e Las Vegas) + * '3C' - (i.e San Francisco) + * '4A' - (i.e Baltimore) + * '4B' - (i.e Albuquerque) + * '4C' - (i.e Seattle) + * '5A' - (i.e Chicago) + * '5B' - (i.e Boulder) + * '5C' - (i.e Bremerton) + * '6A' - (i.e Minneapolis) + * '6B' - (i.e Helena) + * '7' - (i.e Duluth) + * '8' - (i.e Fairbanks) + """ + return self._zone + + @zone.setter + def zone(self, value): + assert isinstance(value, str), \ + 'zone must be a string. Got: {}.'.format(value) + value = value.upper() + assert value in REF_ZONETYPE_SET, 'zone must be one of {}. Got: {}.'.format( + REF_ZONETYPE, value) + self._zone = value + + @property + def vegstart(self): + """Get or set value from 1 to 12 for month at which vegetation starts to evapotranspire. + + This month corresponds to when the leaves of vegetation are assumed to be out. + """ + return self._vegstart + + @vegstart.setter + def vegstart(self, value): + self._vegstart = int_in_range(value, 1, 12, 'vegstart') + + @property + def vegend(self): + """Get or set value from 1 to 12 for month at which vegetation stops evapotranspiration. + + This month corresponds to when the leaves of vegetation are assumed to fall. + """ + return self._vegend + + @vegend.setter + def vegend(self, value): + self._vegend = int_in_range(value, 1, 12, 'vegend') + + @property + def blddensity(self): + """Get or set building footprint density as fraction of urban area. + + The sum of blddensity, grasscover and treecover must be less than or equal to 1. + """ + return self._blddensity + + @blddensity.setter + def blddensity(self, value): + try: + assert self.vegcover + value <= 1, 'The sum of the blddensity, treecover '\ + ' and grasscover ratios must be less than one. Got: {}, {} and {}, ' \ + 'respectively.'.format(value, self.treecover, self.grasscover) + except AttributeError: + pass # attributes haven't been set + self._blddensity = float_in_range(value, 0, 1, 'blddensity') + + @property + def treecover(self): + """Get or set fraction of urban area covered in trees. + + The sum of blddensity, grasscover and treecover must be less than or equal to 1. + """ + return self._treecover + + @treecover.setter + def treecover(self, value): + try: + assert self.grasscover + self.blddensity + value <= 1, 'The sum of the ' \ + 'blddensity, treecover and grasscover ratios must be less than one. ' \ + 'Got: {}, {} and {}, respectively.'.format( + self.blddensity, value, self.grasscover) + except AttributeError: + pass # attributes haven't been set + self._treecover = float_in_range(value, 0, 1, 'treecover') + + @property + def grasscover(self): + """Get or set fraction of urban area covered exclusively in grass. + + This value does not including grass under trees. The sum of blddensity, + grasscover and treecover must be less than or equal to 1. + """ + return self._grasscover + + @grasscover.setter + def grasscover(self, value): + try: + assert self.treecover + self.blddensity + value <= 1, 'The sum of the ' \ + 'blddensity, treecover and grasscover ratios must be less than one. ' \ + 'Got: {}, {} and {}, respectively.'.format( + self.blddensity, self.treecover, value) + except AttributeError: + pass # attributes haven't been set + self._grasscover = float_in_range(value, 0, 1, 'grasscover') + + @property + def vegcover(self): + """Get fraction of urban ground covered by trees and grass.""" + return self.treecover + self.grasscover + + @property + def albveg(self): + """Get or set vegetation albedo.""" + return self._albveg + + @albveg.setter + def albveg(self, value): + self._albveg = float_in_range(value, 0, 1, 'albveg') + + @property + def rurvegcover(self): + """Get or set fraction of rural ground covered by vegetation.""" + return self._rurvegcover + + @rurvegcover.setter + def rurvegcover(self, value): + self._rurvegcover = float_in_range(value, 0, 1, 'rurvegcover') + + @property + def kroad(self): + """Get or set road pavement conductivity [W/mK].""" + return self._kroad + + @kroad.setter + def kroad(self, value): + self._kroad = float_positive(value, 'kroad') + + @property + def croad(self): + """Get or set road pavement volumetric heat capacity [J/m^3K].""" + return self._croad + + @croad.setter + def croad(self, value): + self._croad = float_positive(value, 'croad') + + @property + def schtraffic(self): + """Get or set matrix for schedule of fractional anthropogenic heat load. + + This property consists of a 3 x 24 matrix. Each row corresponding to a schedule + for a weekday, Saturday, and Sunday, and each column corresponds to an hour in + the day, for example: + + .. code-block:: python + + # Weekday schedule + wkday = [0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.7, 0.9, 0.9, 0.6, 0.6, 0.6, 0.6, + 0.6, 0.7, 0.8, 0.9, 0.9, 0.8, 0.8, 0.7, 0.3, 0.2, 0.2] + # Saturday schedule + satday = [0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.6, 0.7, 0.7, 0.7, 0.7, 0.5, 0.4, 0.3, 0.2, 0.2] + # Sunday schedule + sunday = [0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, + 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.2, 0.2] + + schtraffic = [wkday, satday, sunday] + """ + return self._schtraffic + + @schtraffic.setter + def schtraffic(self, value): + + value = SchDef.check_week_validity(value, 'schtraffic') + self._schtraffic = [[0 for c in range(24)] for r in range(3)] + + # Check column number and add value + for i in range(3): + for j in range(24): + self._schtraffic[i][j] = float_in_range(value[i][j]) + + @property + def shgc(self): + """Get or set average building glazing Solar Heat Gain Coefficient. + + If value is None, a unique shgc is set for each building from the refBEM. + (Default: None). + """ + return self._shgc + + @shgc.setter + def shgc(self, value): + if value is None: + self._shgc = value + else: + self._shgc = float_in_range(value, 0, 1, 'shgc') + + @property + def albroof(self): + """Get or set average building roof albedo. + + If value is None, a unique albroof is set for each building from the refBEM. + (Default: None). + """ + return self._albroof + + @albroof.setter + def albroof(self, value): + if value is None: + self._albroof = value + else: + self._albroof = float_in_range(value, 0, 1, 'albroof') + + @property + def glzr(self): + """Get or set average building glazing ratio. + + If value is None, a unique glzr is set for each building from the refBEM. + (Default: None). + """ + return self._glzr + + @glzr.setter + def glzr(self, value): + if value is None: + self._glzr = value + else: + self._glzr = float_in_range(value, 0, 1, 'glzr') + + @property + def vegroof(self): + """Get or set fraction of roofs covered in grass/shrubs. + + If value is None, a unique vegroof is set for each building from the refBEM. + (Default: None). + """ + return self._vegroof + + @vegroof.setter + def vegroof(self, value): + if value is None: + self._vegroof = value + else: + self._vegroof = float_in_range(value, 0, 1, 'vegroof') + + @property + def albwall(self): + """Get or set average building albedo. + + If value is None, a unique albwall is set for each building from the refBEM. + (Default: None). + """ + return self._albwall + + @albwall.setter + def albwall(self, value): + if value is None: + self._albwall = value + else: + self._albwall = float_in_range(value, 0, 1, 'albwall') + + @property + def flr_h(self): + """Get or set average building floor height in meters. + + If value is None, a unique flr_h is set for each building from the refBEM. + (Default: None). + """ + return self._flr_h + + @flr_h.setter + def flr_h(self, value): + if value is None: + self._flr_h = value + else: + self._flr_h = float_positive(value, 'flr_h') + + @property + def ref_bem_vector(self): + """Get list of custom BEMDef objects to add to refBEM. + + If value is None, all BEMDef objects are referenced from the DOE typologies + defined by default in the refBEM matrix. (Default: None). + """ + return self._ref_bem_vector + + @ref_bem_vector.setter + def ref_bem_vector(self, value): + if self._ref_bem_vector is None: + self._ref_bem_vector = value + else: + raise Exception('Cannot reset ref_bem_vector value.') + + @property + def ref_sch_vector(self): + """Get list of custom SchDef objects to add to refSchedule. + + If value is None, all SchDef objects are referenced from the DOE typologies + defined by default in the refSch matrix. (Default: None). + """ + return self._ref_sch_vector + + @ref_sch_vector.setter + def ref_sch_vector(self, value): + if self._ref_sch_vector is None: + self._ref_sch_vector = value + else: + raise Exception('Cannot reset ref_sch_vector value.') + +
    +[docs] + def to_dict(self, include_refDOE=False): + """UWG dictionary representation. + + Args: + add_refDOE: Optional boolean to include custom reference BEMDef and SchDef + objects from the ref_bem_vector and ref_sch_vector attributes. + (Default: False). + """ + + base = {'type': 'UWG'} + + # Add UWG parameters + for attr in self.PARAMETER_LIST: + base[attr] = getattr(self, attr) + + # Add reference data + if include_refDOE and self.ref_bem_vector and self.ref_sch_vector: + base['ref_sch_vector'] = [s.to_dict() for s in self.ref_sch_vector] + base['ref_bem_vector'] = [b.to_dict() for b in self.ref_bem_vector] + + return base
    + + +
    +[docs] + def generate(self): + """Generate all UWG objects after input parameters are set.""" + + if not self.epw_path: + raise Exception('Cannot generate the UWG while epw_path is None.') + if self.ref_bem_vector: + self._customize_reference_data() + self._read_epw() + self._compute_BEM() + self._compute_input() + self._hvac_autosize()
    + + +
    +[docs] + def simulate(self): + """Simulate UWG object and produce urban canyon weather timeseries data. + + This function will set the following attributes in the UWG object: + + * N - Total number of hours in simulation + * ph - Number of simulation time steps per hour + * dayType - Number representing day type: Sunday, Saturday or Weekday + * ceil_time_step - sim timestep fitted to weather file timestep + * solar - SolarCalcs object for current timestep solar calculation + * WeatherData - N x 1 output vector of forc object instance + * UCMData - N x 1 output vector of UCM object instance + * UBLData - N x 1 output vector of UBL object instance + * RSMData - N x 1 output vector of RSM object instace + * USMData - N x 1 output vector of USM object instance + """ + + # total number of hours in simulation + self.N = int(self.simTime.days * 24) + n = 0 # weather time step counter + self.ph = self.simTime.dt / 3600. # dt (simulation time step) in hours + + # Data dump variables + self.WeatherData = [None for x in range(self.N)] + self.UCMData = [None for x in range(self.N)] + self.UBLData = [None for x in range(self.N)] + self.RSMData = [None for x in range(self.N)] + self.USMData = [None for x in range(self.N)] + + print('Simulating new temperature and humidity values for ' + '{} days from {}/{}.'.format(self.nday, self.month, self.day)) + + # iterate through every simulation time-step (i.e 5 min) defined by UWG + day_step = int((1 / self.ph) * 24) + for it in range(1, self.simTime.nt, 1): + if it % day_step == 0: + print('Simulating Day {}'.format(int(it / day_step))) + # Update water temperature (estimated) + if self.nSoil < 3: + # for BUBBLE/CAPITOUL/Singapore only + self.forc.deepTemp = sum( + self.forcIP.temp) / float(len(self.forcIP.temp)) + self.forc.waterTemp = \ + sum(self.forcIP.temp) / float(len(self.forcIP.temp)) - 10.0 + else: + # soil temperature by depth, by month + self.forc.deepTemp = self.Tsoil[self._soilindex1][self.simTime.month - 1] + self.forc.waterTemp = self.Tsoil[2][self.simTime.month - 1] + + # There's probably a better way to update the weather... + self.simTime.update_date() + + # simulation time increment raised to weather time step + self.ceil_time_step = int(math.ceil(it * self.ph)) - 1 + # minus one to be consistent with forcIP list index + # Updating forcing instance + # horizontal Infrared Radiation Intensity (W m-2) + self.forc.infra = self.forcIP.infra[self.ceil_time_step] + # wind speed (m s-1) + self.forc.wind = max(self.forcIP.wind[self.ceil_time_step], + self.geoParam.windMin) + # wind direction + self.forc.uDir = self.forcIP.uDir[self.ceil_time_step] + # specific humidty (kg kg-1) + self.forc.hum = self.forcIP.hum[self.ceil_time_step] + # Pressure (Pa) + self.forc.pres = self.forcIP.pres[self.ceil_time_step] + # air temp (C) + self.forc.temp = self.forcIP.temp[self.ceil_time_step] + self.forc.rHum = self.forcIP.rHum[self.ceil_time_step] # RH (%) + # Precip (mm h-1) + self.forc.prec = self.forcIP.prec[self.ceil_time_step] + # horizontal solar diffuse radiation (W m-2) + self.forc.dif = self.forcIP.dif[self.ceil_time_step] + # normal solar direct radiation (W m-2) + self.forc.dir = self.forcIP.dir[self.ceil_time_step] + # Canyon humidity (absolute) same as rural + self.UCM.canHum = copy.copy(self.forc.hum) + + # Update solar flux + self.solar = SolarCalcs( + self.UCM, self.BEM, self.simTime, self.RSM, self.forc, self.geoParam, + self.rural) + self.rural, self.UCM, self.BEM = self.solar.solarcalcs() + + # Update building & traffic schedule + # Assign day type (1 = weekday, 2 = sat, 3 = sun/other) + if utilities.is_near_zero(self.simTime.julian % 7, 1e-10): + self.dayType = 3 # Sunday + elif utilities.is_near_zero(self.simTime.julian % 7 - 6., 1e-10): + self.dayType = 2 # Saturday + else: + self.dayType = 1 # Weekday + + # Update anthropogenic heat load for each hour (building & UCM) + self.UCM.sensAnthrop = \ + self.sensanth * \ + (self.schtraffic[self.dayType - 1][self.simTime.hourDay]) + + # Update the energy components for building types defined in initialize.UWG + for i in range(len(self.BEM)): + + di = self.dayType - 1 + hi = self.simTime.hourDay + + # Set temperature + + # add from temperature schedule for cooling + self.BEM[i].building.cool_setpoint_day = \ + self.Sch[i].cool[di][hi] + 273.15 + self.BEM[i].building.cool_setpoint_night = \ + self.BEM[i].building.cool_setpoint_day + # add from temperature schedule for heating + self.BEM[i].building.heat_setpoint_day = \ + self.Sch[i].heat[di][hi] + 273.15 + self.BEM[i].building.heat_setpoint_night = \ + self.BEM[i].building.heat_setpoint_day + + # Internal Heat Load Schedule (W/m^2 of floor area for Q) + + # Qelec x elec fraction for day + self.BEM[i].elec = self.Sch[i].q_elec * \ + self.Sch[i].elec[di][hi] + # Qlight x light fraction for day + self.BEM[i].light = self.Sch[i].q_light * \ + self.Sch[i].light[di][hi] + # Number of occupants x occ fraction for day + self.BEM[i].Nocc = self.Sch[i].n_occ * self.Sch[i].occ[di][hi] + # Sensible Q occ * fraction occ sensible Q * number of occ + self.BEM[i].Qocc = self.sensocc * \ + (1 - self.latfocc) * self.BEM[i].Nocc + + # SWH and ventilation schedule + + # L/hr/m2 x SWH fraction for day + self.BEM[i].swh = self.Sch[i].v_swh * self.Sch[i].swh[di][hi] + # m^3/s/m^2 x Vent fraction for day + self.BEM[i].building.vent = self.Sch[i].vent + # Gas Equip Schedule, per m^2 of floor + self.BEM[i].gas = self.Sch[i].q_gas * self.Sch[i].gas[di][hi] + + # This is quite messy, should update + # Update internal heat and corresponding fractional loads + intHeat = self.BEM[i].light + \ + self.BEM[i].elec + self.BEM[i].Qocc + # W/m2 from light, electricity, occupants + self.BEM[i].building.int_heat_day = intHeat + self.BEM[i].building.int_heat_night = intHeat + # fraction of radiant heat from light/equipment of whole internal heat + self.BEM[i].building.int_heat_f_rad = \ + (self.radflight * self.BEM[i].light + self.radfequip * + self.BEM[i].elec) / intHeat + + # fraction of latent heat (from occupants) of whole internal heat + self.BEM[i].building.int_heat_flat = \ + self.latfocc * self.sensocc * self.BEM[i].Nocc / intHeat + + # Update envelope temperature layers + self.BEM[i].T_wallex = self.BEM[i].wall.layerTemp[0] + self.BEM[i].T_wallin = self.BEM[i].wall.layerTemp[-1] + self.BEM[i].T_roofex = self.BEM[i].roof.layerTemp[0] + self.BEM[i].T_roofin = self.BEM[i].roof.layerTemp[-1] + + # Update rural heat fluxes & update vertical diffusion model (VDM) + self.rural.infra = self.forc.infra - self.rural.emissivity * self.SIGMA * \ + self.rural.layerTemp[0] ** 4. # Infrared radiation from rural road + self.rural.SurfFlux(self.forc, self.geoParam, self.simTime, + self.forc.hum, self.forc.temp, self.forc.wind, 2., 0.) + self.RSM.vdm(self.forc, self.rural, self.geoParam, self.simTime) + + # Calculate urban heat fluxes, update UCM & UBL + self.UCM, self.UBL, self.BEM = urbflux( + self.UCM, self.UBL, self.BEM, self.forc, self.geoParam, self.simTime, + self.RSM) + self.UCM.UCModel(self.BEM, self.UBL.ublTemp, + self.forc, self.geoParam) + self.UBL.ublmodel( + self.UCM, self.RSM, self.rural, self.forc, self.geoParam, self.simTime) + + # Experimental code to run diffusion model in the urban area + # N.B Commented out in python UWG because computed wind speed in urban + # VDM: y = =0.84 * ln((2 - x / 20) / 0.51) results in negative log for + # building heights >= 40m. + + # Uroad = copy.copy(self.UCM.road) + # Uroad.sens = copy.copy(self.UCM.sensHeat) + # Uforc = copy.copy(self.forc) + # Uforc.wind = copy.copy(self.UCM.canWind) + # Uforc.temp = copy.copy(self.UCM.canTemp) + # self.USM.VDM(Uforc,Uroad,self.geoParam,self.simTime) + + istimestep = utilities.is_near_zero( + self.simTime.secDay % self.simTime.timePrint, 1e-10) + if istimestep and n < self.N: + + self.WeatherData[n] = copy.copy(self.forc) + _Tdb, _w, self.UCM.canRHum, _h, self.UCM.Tdp, _v = psychrometrics( + self.UCM.canTemp, self.UCM.canHum, self.forc.pres) + + self.UBLData[n] = copy.copy(self.UBL) + self.UCMData[n] = copy.copy(self.UCM) + self.RSMData[n] = copy.copy(self.RSM) + + n += 1
    + + +
    +[docs] + def write_epw(self): + """Write new EPW file to new_epw_path property.""" + + epw_prec = self.epw_precision # precision of epw file input + + for iJ in range(len(self.UCMData)): + # [iJ+self.simTime.timeInitial-8] - increments along weather timestep in epw + # [6 to 21] - column data of epw + + # dry bulb temperature [C] + self.epwinput[iJ + self.simTime.timeInitial - 8][6] = \ + '{0:.{1}f}'.format(self.UCMData[iJ].canTemp - 273.15, epw_prec) + # dew point temperature [?C] + self.epwinput[iJ + self.simTime.timeInitial - 8][7] = \ + '{0:.{1}f}'.format(self.UCMData[iJ].Tdp, epw_prec) + # relative humidity [%] + self.epwinput[iJ + self.simTime.timeInitial - 8][8] = \ + '{0:.{1}f}'.format(self.UCMData[iJ].canRHum, epw_prec) + # wind speed [m/s] + self.epwinput[iJ + self.simTime.timeInitial - 8][21] = \ + '{0:.{1}f}'.format(self.WeatherData[iJ].wind, epw_prec) + + # Writing new EPW file + epw_new_id = open(self.new_epw_path, 'w') + + for i in range(8): + new_epw_line = \ + '{}\n'.format( + reduce(lambda x, y: x + ',' + y, self._header[i])) + epw_new_id.write(new_epw_line) + + for i in range(len(self.epwinput)): + printme = '' + for ei in range(len(self.epwinput[i])): + printme += "{}".format(self.epwinput[i][ei]) + ',' + printme = printme + "{}".format(self.epwinput[i][ei]) + new_epw_line = '{0}\n'.format(printme) + epw_new_id.write(new_epw_line) + + epw_new_id.close() + + print('New climate file is generated at {}.'.format( + self.new_epw_path))
    + + + def _read_input(self, param_path): + """Read the parameter input file (.uwg file) and set as UWG attributes.""" + + # Open .UWG file and feed csv data to initializeDataFile + param_data = utilities.read_csv(param_path) + + # The initialize.UWG is read with a dictionary so that users changing + # line endings or line numbers doesn't make reading input incorrect + count = 0 + self._init_param_dict = {} + while count < len(param_data): + row = param_data[count] + row = [c.replace(' ', '').lower() for c in row] + + # optional parameters might be empty so handle separately + is_optional_parameter = \ + row[0] in self.OPTIONAL_PARAMETER_SET if len( + row) > 0 else False + + try: + if row == [] or '#' in row[0]: + count += 1 + elif row[0] == 'schtraffic': + # SchTraffic: 3 x 24 matrix + trafficrows = param_data[count + 1:count + 4] + self._init_param_dict[row[0]] = \ + [utilities.str2fl(r[:24]) for r in trafficrows] + count += 4 + elif row[0] == 'bld': + # bld: list of (bldtype, builtera, frac) + count += 1 + bld = [] + nextrow = [c.replace(' ', '').lower() + for c in param_data[count]] + while len(nextrow) > 0 and nextrow[0] in REF_BLDTYPE_SET: + bldtype, builtera, frac = nextrow[0], nextrow[1], nextrow[2] + bld.append((bldtype, builtera, float(frac))) + count += 1 + nextrow = [c.replace(' ', '').lower() + for c in param_data[count]] + self._init_param_dict[row[0]] = bld + elif row[0] == 'zone': + self._init_param_dict[row[0]] = row[1] + count += 1 + elif is_optional_parameter: + self._init_param_dict[row[0]] = None if row[1] == '' else float( + row[1]) + count += 1 + else: + self._init_param_dict[row[0]] = float(row[1]) + count += 1 + except (ValueError, IndexError) as e: + print(e) + print('Error while reading parameter at row {}. Got: {}.'.format( + count, row)) + + # Set UWG parameters + for attr in self.PARAMETER_LIST: + assert attr in self._init_param_dict, 'The {} attribute is not defined in ' \ + 'the {} parameter file.'.format( + attr, os.path.split(param_path)[-1]) + setattr(self, attr, self._init_param_dict[attr]) + + def _read_epw(self): + """Read EPW file and sets corresponding UWG weather and site properties. + + This function will set the following attributes in the UWG object: + + * epwinput - EPW weather data as list + * lat - latitude from EPW header + * lon - longitude from EPW header + * gmt - Greenwich Mean Time from EPW header + * nSoil - Number of soil depths from EPW header + * Tsoil - nSoil x 12 matrix for soil temperture from EPW header[1] + * depth_soil - nSoil x 1 matrix for soil depth from EPW header[1] + * new_epw_path - file path to modified EPW file + + Note: + [1] EPW CSV Format (In/Out). Retrieved August 26, 2020, + from https://bigladdersoftware.com/epx/docs/8-2/auxiliary-programs/epw-csv-format-inout.html + """ + + # Open epw file and feed csv data to climate_data + climate_data = utilities.read_csv(self.epw_path) + + # Read header lines (1 to 8) from EPW and ensure TMY2 format. + self._header = climate_data[0:8] + + # Read weather data from EPW for each time step in weather file. (lines 8 - end) + self.epwinput = climate_data[8:] + + # Read Lat, Long (line 1 of EPW) + self.lat = float(self._header[0][6]) + self.lon = float(self._header[0][7]) + self.gmt = float(self._header[0][8]) + + # Read in soil temperature data (assumes this is always there) + soilData = self._header[3] + # Number of ground temperature depths + self.nSoil = int(soilData[1]) + # nSoil x 12 matrix for soil temperture (K) + self.Tsoil = [[0 for c in range(12)] for r in range(self.nSoil)] + # nSoil x 1 matrix for soil depth (m) + self.depth_soil = [[0] for r in range(self.nSoil)] + + # Read monthly data for each layer of soil from EPW file + for i in range(self.nSoil): + # get soil depth for each nSoil + self.depth_soil[i][0] = float(soilData[2 + (i * 16)]) + # monthly data + for j in range(12): + # 12 months of soil T for specific depth + self.Tsoil[i][j] = float(soilData[6 + (i * 16) + j]) + 273.15 + + def _compute_BEM(self): + """Define BEMDef objects for each archetype defined in the bld matrix. + + This function will set the following attributes in the UWG object: + + * r_glaze_total - Area-weighted average of glazing ratio from urban building + stock [Km/W]. + * SHGC_total - Area-weighted average of SHGC from urban building stock. + * alb_wall_total - Area-weighted average of wall albedo from urban building + stock. + * BEM - list of BEMDef objects extracted from readDOE + * Sch - list of Schedule objects extracted from readDOE + """ + + # Define building energy models + k = 0 + self.r_glaze_total = 0. + self.SHGC_total = 0. + self.alb_wall_total = 0. + h_floor = self.flr_h or 3.05 # average floor height + + total_urban_bld_area = math.pow(self.charlength, 2) * self.blddensity * \ + self.bldheight / h_floor # total building floor area + + self.BEM = [] # list of BEMDef objects + self.Sch = [] # list of Schedule objects + + # Modify zone to be used as python index + bld_z = '1A' if self.zone == '1B' else '5B' if self.zone == '5C' else self.zone + zone_idx = REF_ZONETYPE.index(bld_z) + + # Build unique key based on bldtype and builtera strings + bld_dict = {bldg[0] + bldg[1]: (bldg[0], REF_BUILTERA.index(bldg[1]), bldg[2]) + for bldg in self.bld} + + for i in range(len(self.refBEM)): # ~16 building types (more w/ custom refs) + for j in range(3): # ~ 3 built eras + + if not self.refBEM[i][j][0]: + # when add custom types some matrix elements are None + continue + + ref_key = \ + self.refBEM[i][j][0].bldtype + \ + self.refBEM[i][j][0].builtera + if ref_key in bld_dict: + # Add to BEM list + bldtype, builtera_idx, frac = bld_dict[ref_key] + self.BEM.append(self.refBEM[i][builtera_idx][zone_idx]) + self.BEM[k].frac = frac + self.BEM[k].fl_area = frac * total_urban_bld_area + + # Overwrite with optional parameters if provided + if self.glzr: + self.BEM[k].building.glazing_ratio = self.glzr + if self.albroof: + self.BEM[k].roof.albedo = self.albroof + if self.vegroof: + self.BEM[k].roof.vegcoverage = self.vegroof + if self.shgc: + self.BEM[k].building.shgc = self.shgc + if self.albwall: + self.BEM[k].wall.albedo = self.albwall + if self.flr_h: + self.BEM[k].building.floor_height = self.flr_h + + # Keep track of total urban r_glaze, SHGC, and alb_wall for UCM model + self.r_glaze_total += \ + self.BEM[k].frac * self.BEM[k].building.glazing_ratio + self.SHGC_total += self.BEM[k].frac * \ + self.BEM[k].building.shgc + self.alb_wall_total += self.BEM[k].frac * \ + self.BEM[k].wall.albedo + # Add to schedule list + self.Sch.append( + self.refSchedule[i][builtera_idx][zone_idx]) + k += 1 + + def _compute_input(self): + """Create input objects from user-defined parameters. + + This function will set the following input objects as attributes in the UWG + object: + + * simTime - SimParam object for time parameters + * weather - Weather object for weather data + * forcIP - Forcing object to estimate deep ground/water temperature + * forc - empty Forcing object to estimate deep ground/water temperature + * RSM - RSMDef object for rural site and vertical diffusion model + * USM - RSMDef object for urban site and vertical diffusion model + * geoParam - Param object for geographic parameters + * UBL - UBL object for urban boundary layer model + * UCM - UCMDef object for urban canopy model + * road - Element object for urban road + * rural - Element object for rural road + """ + self.simTime = SimParam(self.dtsim, self.dtweather, self.month, + self.day, self.nday) # simulation time parameters + + # weather file data for simulation time period + self.weather = Weather( + self.epw_path, self.simTime.timeInitial, self.simTime.timeFinal) + self.forcIP = Forcing(self.weather.staTemp, + self.weather) # init Forcing obj + self.forc = Forcing() # empty Forcing obj + + # Initialize geographic Param and Urban Boundary Layer Objects + nightStart = 18. # arbitrary values for begin/end hour for night setpoint + nightEnd = 8. + maxdx = 250. # max dx (m) + + self.geoParam = Param( + self.h_ubl1, self.h_ubl2, self.h_ref, self.h_temp, self.h_wind, self.c_circ, + self.maxday, self.maxnight, self.lattree, self.latgrss, self.albveg, + self.vegstart, self.vegend, nightStart, nightEnd, self.windmin, self.WGMAX, + self.c_exch, maxdx, self.G, self.CP, self.VK, self.R, self.RV, self.LV, + math.pi, self.SIGMA, self.WATERDENS, self.LVTT, self.TT, self.ESTT, self.CL, + self.CPV, self.B, self.CM, self.COLBURN) + + self.UBL = UBLDef( + 'C', self.charlength, self.weather.staTemp[0], maxdx, + self.geoParam.dayBLHeight, self.geoParam.nightBLHeight) + + # Defining road + emis = 0.93 + asphalt = Material(self.kroad, self.croad, 'asphalt') + road_T_init = 293. + road_horizontal = 1 + # fraction of vegetation (tree & grass) coverage on unbuilt surface + road_veg_coverage = self.vegcover / (1 - self.blddensity) + road_grass_coverage = self.grasscover / (1 - self.blddensity) + road_tree_coverage = self.treecover / (1 - self.blddensity) + + # define road layers + road_layer_num = int(math.ceil(self.droad / 0.05)) + # 0.5/0.05 ~ 10 x 1 matrix of 0.05 thickness + thickness_vector = [0.05 for r in range(road_layer_num)] + material_vector = [asphalt for r in range(road_layer_num)] + + self.road = Element( + self.albroad, emis, thickness_vector, material_vector, road_veg_coverage, + road_T_init, road_horizontal, name='urban_road') + self.road.treecoverage = road_tree_coverage + self.road.grasscoverage = road_grass_coverage + + self.rural = Element( + self.albroad, emis, thickness_vector, material_vector, self.rurvegcover, + road_T_init, road_horizontal, name='rural_road') + + # Reference site class (also include VDM) + self.RSM = RSMDef( + self.lat, self.lon, self.gmt, self.h_obs, self.weather.staTemp[0], + self.weather.staPres[0], self.geoParam, self.Z_MESO_PATH) + self.USM = RSMDef( + self.lat, self.lon, self.gmt, self.bldheight / + 10., self.weather.staTemp[0], + self.weather.staPres[0], self.geoParam, self.Z_MESO_PATH) + + T_init = self.weather.staTemp[0] + H_init = self.weather.staHum[0] + wind_init = self.weather.staUmod[0] + + self.UCM = UCMDef( + self.bldheight, self.blddensity, self.vertohor, self.treecover, + self.sensanth, self.latanth, T_init, H_init, wind_init, + self.geoParam, self.r_glaze_total, self.SHGC_total, self.alb_wall_total, + self.road) + + self.UCM.h_mix = self.h_mix + + # Define Road Element & buffer to match ground temperature depth + roadMat, newthickness = UWG._procmat( + self.road, self.MAXTHICKNESS, self.MINTHICKNESS) + + for i in range(self.nSoil): + # if soil depth is greater then the thickness of the road + # we add new slices of soil at max thickness until road is greater or equal + + is_soildepth_equal = utilities.is_near_zero( + self.depth_soil[i][0] - sum(newthickness), 1e-15) + + if is_soildepth_equal or (self.depth_soil[i][0] > sum(newthickness)): + while self.depth_soil[i][0] > sum(newthickness): + newthickness.append(self.MAXTHICKNESS) + roadMat.append(self.SOIL) + self._soilindex1 = i + break + + self.road = Element( + self.road.albedo, self.road.emissivity, newthickness, roadMat, + self.road.vegcoverage, self.road.layerTemp[0], self.road.horizontal, + self.road.name) + + # Define Rural Element + ruralMat, newthickness = self._procmat( + self.rural, self.MAXTHICKNESS, self.MINTHICKNESS) + + for i in range(self.nSoil): + # if soil depth is greater then the thickness of the road + # we add new slices of soil at max thickness until road is greater or equal + + is_soildepth_equal = utilities.is_near_zero( + self.depth_soil[i][0] - sum(newthickness), 1e-15) + + if is_soildepth_equal or (self.depth_soil[i][0] > sum(newthickness)): + while self.depth_soil[i][0] > sum(newthickness): + newthickness.append(self.MAXTHICKNESS) + ruralMat.append(self.SOIL) + + self._soilindex2 = i + break + + self.rural = Element( + self.rural.albedo, self.rural.emissivity, newthickness, ruralMat, + self.rural.vegcoverage, self.rural.layerTemp[0], self.rural.horizontal, + self.rural.name) + + def _hvac_autosize(self): + """HVAC autosizing (unlimited cooling & heating) in BEM objects.""" + + for i in range(len(self.BEM)): + if self.autosize: + self.BEM[i].building.coolcap = 9999. + self.BEM[i].building.heat_cap = 9999. + + def _check_reference_data(self, ref_bem_vector, ref_sch_vector): + """Check validity of reference BEMDef and SchDef lists. + + Args: + ref_bem_vector: List of custom BEMDef objects to override or add to + the refBEM matrix according to the BEMDef bldtype and builtera values. + ref_sch_vector: List of custom SchDef objects to override or add to + the refSchedule matrix according to the SchDef bldtype and builtera + values. + + Returns: + Tuple consisting of validated ref_bem_vector and ref_sch_vector. + """ + # check for null vector + if ref_bem_vector is None: + return None, None + + assert len(ref_sch_vector) == len(ref_bem_vector), 'The ' \ + 'ref_sch_vector and ref_bem_vector properties must be lists of equal ' \ + 'length. Got lengths {} and {}, respectively.'.format( + len(ref_sch_vector), len(ref_bem_vector)) + + assert all(isinstance(v, SchDef) for v in ref_sch_vector), 'All items in the ' \ + 'ref_sch_vector must be a SchDef object.' + assert all(isinstance(v, BEMDef) for v in ref_bem_vector), 'All items in the ' \ + 'ref_bem_vector must be a BEMDef object.' + + for ref_bem, ref_sch in zip(ref_bem_vector, ref_sch_vector): + assert ref_bem.bldtype == ref_sch.bldtype, 'The bldtype for ' \ + 'corresponding items in ref_bem_vector and ref_sch_vector must be the ' \ + 'same. Got {} and {}.'.format(ref_bem.bldtype, ref_sch.bldtype) + assert ref_bem.builtera == ref_sch.builtera, 'The builtera for ' \ + 'corresponding items in ref_bem_vector and ref_sch_vector must be the ' \ + 'same. Got {} and {}.'.format( + ref_bem.builtera, ref_sch.builtera) + + return ref_bem_vector, ref_sch_vector + + def _customize_reference_data(self): + """Customize refBEM and refSchedule data by extending or overriding DOE reference data. + + The custom BEMDef and SchDef objects must contain bldtype and builtera + identifiers referencing a nonzero fraction of urban area in the UWG bld property + to be used in the UWG model. Also note that this method should be used before + calling the generate method, in order to ensure the reference data gets + transferred over to the UWG object BEM and Schedule properties. + + Args: + ref_bem_vector: List of custom BEMDef objects to override or add to + the refBEM matrix according to the BEMDef bldtype and builtera values. + ref_sch_vector: List of custom SchDef objects to override or add to + the refSchedule matrix according to the SchDef bldtype and builtera + values. + """ + bld_z = '1A' if self.zone == '1B' else '5B' if self.zone == '5C' else self.zone + zi = REF_ZONETYPE.index(bld_z) + # Insert or extend refSchedule matrix + for sch in self.ref_sch_vector: + ei = REF_BUILTERA.index(sch.builtera) + try: + ti = REF_BLDTYPE.index(sch.bldtype) # will fail if custom type + print('Overwrite DOE reference schedule "{} {}" ' + 'with custom schedule.'.format(sch.builtera, sch.bldtype)) + except ValueError: + # Add new rows based on type index in object + ti = len(self.refSchedule) + self.refSchedule.append([[None for c in range(16)] + for r in range(3)]) + print('Add custom schedule for "{} {}".'.format( + sch.builtera, sch.bldtype)) + self.refSchedule[ti][ei][zi] = sch + + # Insert or extend refBEM matrix + for bem in self.ref_bem_vector: + ei = REF_BUILTERA.index(bem.builtera) + try: + ti = REF_BLDTYPE.index(bem.bldtype) # will fail if custom type + print('Overwrite DOE reference BEM "{} {}" ' + 'with custom schedule.'.format(bem.builtera, bem.bldtype)) + except ValueError: + # Add new rows based on type index in object + ti = len(self.refBEM) + self.refBEM.append([[None for c in range(16)] + for r in range(3)]) + print('Add custom bem for "{} {}".'.format( + bem.builtera, bem.bldtype)) + self.refBEM[ti][ei][zi] = bem + +
    +[docs] + @ staticmethod + def load_refDOE(refDOE_path=REFDOE_PATH): + """Static method to deserialize DOE reference data. + + Args: + readDOE_path: Text string for full path to the refDOE pickle. + (Default: the filepath specified in the UWG.REFDOE_PATH constant). + + Returns: + Two 16 x 3 x 16 matrices of reference BEMDef and SchDef objects, + respectively. + """ + assert os.path.exists(refDOE_path), \ + 'File: {} does not exist.'.format(refDOE_path) + + # open pickle file in binary form + with open(refDOE_path, 'rb') as refDOE_file: + refBEM = pickle.load(refDOE_file) + refSchedule = pickle.load(refDOE_file) + return refBEM, refSchedule
    + + + @ staticmethod + def _procmat(materials, max_thickness, min_thickness): + """Processes material layer slices in Element objects based on layer number and depth. + + This function will divide a material with single layer thickness or that is too + thick into subdivisions. + """ + newmat = [] + newthickness = [] + k = materials.layerThermalCond + Vhc = materials.layerVolHeat + + if len(materials.layer_thickness_lst) > 1: + + for j in range(len(materials.layer_thickness_lst)): + # Break up each layer that's more than max thickness (0.05m) + if materials.layer_thickness_lst[j] > max_thickness: + nlayers = math.ceil( + (materials.layer_thickness_lst[j] / float(max_thickness))) + for i in range(int(nlayers)): + newmat.append( + Material(k[j], Vhc[j], name=materials.name)) + newthickness.append( + materials.layer_thickness_lst[j] / float(nlayers)) + # Material that's less then min_thickness is not added. + elif materials.layer_thickness_lst[j] < min_thickness: + print('WARNING: Material layer too thin (less then 2 cm) to process.' + 'Material {} is {:.2f} cm.'.format( + materials.name, min_thickness * 100)) + else: + newmat.append(Material(k[j], Vhc[j], name=materials.name)) + newthickness.append(materials.layer_thickness_lst[j]) + + else: + + # Divide single layer into two (UWG assumes at least 2 layers) + if materials.layer_thickness_lst[0] > max_thickness: + nlayers = math.ceil( + (materials.layer_thickness_lst[0] / float(max_thickness))) + for i in range(int(nlayers)): + newmat.append(Material(k[0], Vhc[0], name=materials.name)) + newthickness.append( + materials.layer_thickness_lst[0] / float(nlayers)) + # Material should be at least 1cm thick, so if we're here, + # should give warning and stop. Only warning given for now. + elif materials.layer_thickness_lst[0] < min_thickness * 2: + newthickness = [min_thickness / 2., min_thickness / 2.] + newmat = [Material(k[0], Vhc[0], name=materials.name), + Material(k[0], Vhc[0], name=materials.name)] + print('WARNING: Material layer less then 2 cm is found.' + 'Material {} is {:.2f} cm. May cause error.'.format( + materials.name, min_thickness * 100)) + else: + newthickness = [materials.layer_thickness_lst[0] / 2., + materials.layer_thickness_lst[0] / 2.] + newmat = [Material(k[0], Vhc[0], name=materials.name), + Material(k[0], Vhc[0], name=materials.name)] + + return newmat, newthickness + +
    +[docs] + def ToString(self): + """Overwrite .NET ToString method.""" + return self.__repr__()
    + + + def __repr__(self): + def _split_string(s): + return s[0] + ':\n ' + s[1].replace(',', '\n ') + + def _tabbed(s): + return _split_string(s.__repr__().split(':')) + + def _list_2_tabbed(b): + return reduce(lambda a, b: a + '\n' + b, [_tabbed(_b) for _b in b]) + + simtime_str = _tabbed(self.simTime) + '\n' \ + if hasattr(self, 'simTime') else 'No simTime attr.\n' + weather_str = _tabbed(self.weather) + '\n' \ + if hasattr(self, 'weather') else 'No weather attr.\n' + param_str = _tabbed(self.geoParam) + '\n' \ + if hasattr(self, 'geoParam') else 'No geoParam attr.\n' + ubl_str = _tabbed(self.UBL) + '\n' \ + if hasattr(self, 'UBL') else 'No UBL attr.\n' + rsm_str = 'Rural ' + _tabbed(self.RSM) + '\n' \ + if hasattr(self, 'RSM') else 'No Rural RSM attr.\n' + usm_str = 'Urban ' + _tabbed(self.USM) + '\n' \ + if hasattr(self, 'USM') else 'No Urban RSM attr.\n' + ucm_str = _tabbed(self.UCM) + '\n' \ + if hasattr(self, 'UCM') else 'No UCM attr.\n' + bem_str = reduce(lambda a, b: a.__repr__() + '\n' + b.__repr__(), self.BEM) \ + if hasattr(self, 'BEM') else 'No BEM attr.' + + return 'UWG for {}:\n\n{}{}{}{}{}{}{}{}'.format( + self.epw_path, simtime_str, weather_str, param_str, ubl_str, rsm_str, + usm_str, ucm_str, bem_str)
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_modules/uwg/weather.html b/docs/_modules/uwg/weather.html new file mode 100644 index 00000000..2b73a145 --- /dev/null +++ b/docs/_modules/uwg/weather.html @@ -0,0 +1,548 @@ + + + + + + + uwg.weather — uwg documentation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    + +

    Source code for uwg.weather

    +"""Class for Weather data from EPW."""
    +from .utilities import read_csv, str2fl
    +from .psychrometrics import hum_from_rhum_temp
    +
    +try:
    +    range = xrange
    +except NameError:
    +    pass
    +
    +
    +
    +[docs] +class Weather(object): + """Read EPW file[1] and store weather timeseries data. + + Args: + climate_file: Text string for the name of the rural epw file that will be + morphed. + HI: Number for initial EPW row based on final Julian data. + HF: Number for final EPW row based on start Julian data. + + Properties: + * location -- location row from EPW file. + * staTemp -- drybulb (K) + * staTdp -- dewpoint (C) + * staRhum -- air RH (%) + * staPres -- air pressure (Pa) + * staInfra -- horizontal Infrared Radiation Intensity (W m-2) + * staHor -- horizontal radiation [W m-2] + * staDir -- normal solar direct radiation (W m-2) + * staDif -- horizontal solar diffuse radiation (W m-2) + * staUdir -- wind direction + * staUmod -- wind speed (m s-1) + * staRobs -- precipitation (mm h-1) + * staHum -- specific humidty (kgH20 kgN202-1) + + Note: + [1] EPW CSV Format (In/Out). Retrieved August 26, 2020, + from http://bigladdersoftware.com/epx/docs/8-2/auxiliary-programs/epw-csv-format-inout.html + """ + + def __init__(self, epw_path, HI, HF): + try: + self._climate_data = read_csv(epw_path) + except Exception as e: + raise Exception("Failed to read .epw file! {}".format(e.message)) + + self.location = self._climate_data[0][1] + cd = self._climate_data[HI:HF + 1] + self.staTemp = str2fl([cd[i][6] for i in range(len(cd))]) + self.staTdp = str2fl([cd[i][7] for i in range(len(cd))]) + self.staRhum = str2fl([cd[i][8] for i in range(len(cd))]) + self.staPres = str2fl([cd[i][9] for i in range(len(cd))]) + # staInfra: + self.staInfra = str2fl([cd[i][12] for i in range(len(cd))]) + # staHor: + self.staHor = str2fl([cd[i][13] for i in range(len(cd))]) + # staDir: + self.staDir = str2fl([cd[i][14] for i in range(len(cd))]) + # staDif: + self.staDif = str2fl([cd[i][15] for i in range(len(cd))]) + self.staUdir = str2fl([cd[i][20] for i in range(len(cd))]) + self.staUmod = str2fl([cd[i][21] for i in range(len(cd))]) + self.staHum = [0.0] * len(self.staTemp) + for i in range(len(self.staTemp)): + self.staHum[i] = \ + hum_from_rhum_temp(self.staRhum[i], self.staTemp[i], self.staPres[i]) + self.staTemp = [s + 273.15 for s in self.staTemp] # air temperature (K) + + # Set precipitation to array of zeros. This is done to avoid errors + # for EPW files with incomplete or missing precipitation data. The + # current implementation of the UWG doesn't use precipitation data + # due to the difficulty in validating latent heat impact, the poor + # quality precipitation data from weather sensors, and the marginal + # impact it has on UHI. + self.staRobs = [0.0] * len(self.staTemp) + + def __repr__(self): + return 'Weather,\n City: {}\n, Max Tdb: {}C\n, Min Tdb: {}C\n'.format( + self.location, round(max(self.staTemp) - 273.15, 2), + round(min(self.staTemp) - 273.15, 2))
    + +
    + +
    + +
    +
    +
    +
    +

    + Back to top + +

    +

    + © Copyright 2024, Ladybug Tools.
    + Created using Sphinx 8.0.2.
    +

    +
    +
    + + \ No newline at end of file diff --git a/docs/_sources/cli/index.rst.txt b/docs/_sources/cli/index.rst.txt new file mode 100644 index 00000000..901d7edb --- /dev/null +++ b/docs/_sources/cli/index.rst.txt @@ -0,0 +1,15 @@ +CLI Docs +======== + +Installation +------------ + +To check if the command line is installed correctly use ``uwg --help`` + +Commands +-------- +.. toctree:: + :maxdepth: 1 + + validate + simulate diff --git a/docs/_sources/cli/simulate.rst.txt b/docs/_sources/cli/simulate.rst.txt new file mode 100644 index 00000000..61e15657 --- /dev/null +++ b/docs/_sources/cli/simulate.rst.txt @@ -0,0 +1,6 @@ +simulate +======== + +.. click:: uwg.cli.simulate:simulate + :prog: uwg simulate + :show-nested: diff --git a/docs/_sources/cli/validate.rst.txt b/docs/_sources/cli/validate.rst.txt new file mode 100644 index 00000000..b9d9481e --- /dev/null +++ b/docs/_sources/cli/validate.rst.txt @@ -0,0 +1,6 @@ +validate +======== + +.. click:: uwg.cli.validate:validate + :prog: uwg validate + :show-nested: diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt new file mode 100644 index 00000000..95b2d53c --- /dev/null +++ b/docs/_sources/index.rst.txt @@ -0,0 +1,41 @@ +Welcome to uwg's documentation! +=================================== + +The Urban Weather Generator (uwg) is a Python application for modeling +the `urban heat island effect `_ . +Specifically, it morphs rural `EnergyPlus weather (.epw) files `_ +to reflect average conditions within the urban canyon using a range of properties. + +Installation +============ + +``pip install -U uwg``. + +To check if the command line is installed correctly use ``uwg --help`` + +CLI Docs +============= + +For command line interface documentation and API documentation see the pages below. + + +.. toctree:: + :maxdepth: 2 + + cli/index + + +uwg +================ + +.. toctree:: + :maxdepth: 4 + + modules + +Indices and tables +------------------ + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_sources/modules.rst.txt b/docs/_sources/modules.rst.txt new file mode 100644 index 00000000..877e18d4 --- /dev/null +++ b/docs/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +uwg +=== + +.. toctree:: + :maxdepth: 4 + + uwg diff --git a/docs/_sources/uwg.BEMDef.rst.txt b/docs/_sources/uwg.BEMDef.rst.txt new file mode 100644 index 00000000..70fb9c80 --- /dev/null +++ b/docs/_sources/uwg.BEMDef.rst.txt @@ -0,0 +1,7 @@ +uwg.BEMDef module +================= + +.. automodule:: uwg.BEMDef + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.RSMDef.rst.txt b/docs/_sources/uwg.RSMDef.rst.txt new file mode 100644 index 00000000..d123a683 --- /dev/null +++ b/docs/_sources/uwg.RSMDef.rst.txt @@ -0,0 +1,7 @@ +uwg.RSMDef module +================= + +.. automodule:: uwg.RSMDef + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.UBLDef.rst.txt b/docs/_sources/uwg.UBLDef.rst.txt new file mode 100644 index 00000000..f6905ae0 --- /dev/null +++ b/docs/_sources/uwg.UBLDef.rst.txt @@ -0,0 +1,7 @@ +uwg.UBLDef module +================= + +.. automodule:: uwg.UBLDef + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.UCMDef.rst.txt b/docs/_sources/uwg.UCMDef.rst.txt new file mode 100644 index 00000000..b43b1992 --- /dev/null +++ b/docs/_sources/uwg.UCMDef.rst.txt @@ -0,0 +1,7 @@ +uwg.UCMDef module +================= + +.. automodule:: uwg.UCMDef + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.building.rst.txt b/docs/_sources/uwg.building.rst.txt new file mode 100644 index 00000000..b439bfa5 --- /dev/null +++ b/docs/_sources/uwg.building.rst.txt @@ -0,0 +1,7 @@ +uwg.building module +=================== + +.. automodule:: uwg.building + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.cli.rst.txt b/docs/_sources/uwg.cli.rst.txt new file mode 100644 index 00000000..b070b5d9 --- /dev/null +++ b/docs/_sources/uwg.cli.rst.txt @@ -0,0 +1,19 @@ +uwg.cli package +=============== + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + uwg.cli.simulate + uwg.cli.validate + +Module contents +--------------- + +.. automodule:: uwg.cli + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.cli.simulate.rst.txt b/docs/_sources/uwg.cli.simulate.rst.txt new file mode 100644 index 00000000..0ae3260b --- /dev/null +++ b/docs/_sources/uwg.cli.simulate.rst.txt @@ -0,0 +1,7 @@ +uwg.cli.simulate module +======================= + +.. automodule:: uwg.cli.simulate + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.cli.validate.rst.txt b/docs/_sources/uwg.cli.validate.rst.txt new file mode 100644 index 00000000..c7085036 --- /dev/null +++ b/docs/_sources/uwg.cli.validate.rst.txt @@ -0,0 +1,7 @@ +uwg.cli.validate module +======================= + +.. automodule:: uwg.cli.validate + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.element.rst.txt b/docs/_sources/uwg.element.rst.txt new file mode 100644 index 00000000..8cd0d05f --- /dev/null +++ b/docs/_sources/uwg.element.rst.txt @@ -0,0 +1,7 @@ +uwg.element module +================== + +.. automodule:: uwg.element + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.forcing.rst.txt b/docs/_sources/uwg.forcing.rst.txt new file mode 100644 index 00000000..1d353b33 --- /dev/null +++ b/docs/_sources/uwg.forcing.rst.txt @@ -0,0 +1,7 @@ +uwg.forcing module +================== + +.. automodule:: uwg.forcing + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.infracalcs.rst.txt b/docs/_sources/uwg.infracalcs.rst.txt new file mode 100644 index 00000000..83fc3388 --- /dev/null +++ b/docs/_sources/uwg.infracalcs.rst.txt @@ -0,0 +1,7 @@ +uwg.infracalcs module +===================== + +.. automodule:: uwg.infracalcs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.material.rst.txt b/docs/_sources/uwg.material.rst.txt new file mode 100644 index 00000000..fb83e63a --- /dev/null +++ b/docs/_sources/uwg.material.rst.txt @@ -0,0 +1,7 @@ +uwg.material module +=================== + +.. automodule:: uwg.material + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.param.rst.txt b/docs/_sources/uwg.param.rst.txt new file mode 100644 index 00000000..cc96db67 --- /dev/null +++ b/docs/_sources/uwg.param.rst.txt @@ -0,0 +1,7 @@ +uwg.param module +================ + +.. automodule:: uwg.param + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.psychrometrics.rst.txt b/docs/_sources/uwg.psychrometrics.rst.txt new file mode 100644 index 00000000..00ab0934 --- /dev/null +++ b/docs/_sources/uwg.psychrometrics.rst.txt @@ -0,0 +1,7 @@ +uwg.psychrometrics module +========================= + +.. automodule:: uwg.psychrometrics + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.readDOE.rst.txt b/docs/_sources/uwg.readDOE.rst.txt new file mode 100644 index 00000000..1f75586f --- /dev/null +++ b/docs/_sources/uwg.readDOE.rst.txt @@ -0,0 +1,7 @@ +uwg.readDOE module +================== + +.. automodule:: uwg.readDOE + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.rst.txt b/docs/_sources/uwg.rst.txt new file mode 100644 index 00000000..b1a715cc --- /dev/null +++ b/docs/_sources/uwg.rst.txt @@ -0,0 +1,44 @@ +uwg package +=========== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + uwg.cli + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + uwg.BEMDef + uwg.RSMDef + uwg.UBLDef + uwg.UCMDef + uwg.building + uwg.element + uwg.forcing + uwg.infracalcs + uwg.material + uwg.param + uwg.psychrometrics + uwg.readDOE + uwg.schdef + uwg.simparam + uwg.solarcalcs + uwg.urbflux + uwg.utilities + uwg.uwg + uwg.weather + +Module contents +--------------- + +.. automodule:: uwg + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.schdef.rst.txt b/docs/_sources/uwg.schdef.rst.txt new file mode 100644 index 00000000..25ea943a --- /dev/null +++ b/docs/_sources/uwg.schdef.rst.txt @@ -0,0 +1,7 @@ +uwg.schdef module +================= + +.. automodule:: uwg.schdef + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.simparam.rst.txt b/docs/_sources/uwg.simparam.rst.txt new file mode 100644 index 00000000..a6ae98a9 --- /dev/null +++ b/docs/_sources/uwg.simparam.rst.txt @@ -0,0 +1,7 @@ +uwg.simparam module +=================== + +.. automodule:: uwg.simparam + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.solarcalcs.rst.txt b/docs/_sources/uwg.solarcalcs.rst.txt new file mode 100644 index 00000000..920549c7 --- /dev/null +++ b/docs/_sources/uwg.solarcalcs.rst.txt @@ -0,0 +1,7 @@ +uwg.solarcalcs module +===================== + +.. automodule:: uwg.solarcalcs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.urbflux.rst.txt b/docs/_sources/uwg.urbflux.rst.txt new file mode 100644 index 00000000..0eb1fb71 --- /dev/null +++ b/docs/_sources/uwg.urbflux.rst.txt @@ -0,0 +1,7 @@ +uwg.urbflux module +================== + +.. automodule:: uwg.urbflux + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.utilities.rst.txt b/docs/_sources/uwg.utilities.rst.txt new file mode 100644 index 00000000..d33ac09f --- /dev/null +++ b/docs/_sources/uwg.utilities.rst.txt @@ -0,0 +1,7 @@ +uwg.utilities module +==================== + +.. automodule:: uwg.utilities + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.uwg.rst.txt b/docs/_sources/uwg.uwg.rst.txt new file mode 100644 index 00000000..94b993bf --- /dev/null +++ b/docs/_sources/uwg.uwg.rst.txt @@ -0,0 +1,7 @@ +uwg.uwg module +============== + +.. automodule:: uwg.uwg + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/uwg.weather.rst.txt b/docs/_sources/uwg.weather.rst.txt new file mode 100644 index 00000000..e31dbcbb --- /dev/null +++ b/docs/_sources/uwg.weather.rst.txt @@ -0,0 +1,7 @@ +uwg.weather module +================== + +.. automodule:: uwg.weather + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_static/basic.css b/docs/_static/basic.css new file mode 100644 index 00000000..f316efcb --- /dev/null +++ b/docs/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- 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 p.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: 360px; + 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; +} + +a:visited { + color: #551A8B; +} + +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, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 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; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + 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; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption 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 { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- 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; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.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; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +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 { + margin: 1em 0; +} + +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: absolute; + 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/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css new file mode 100644 index 00000000..09e88ce3 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css @@ -0,0 +1,1109 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1156px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1056px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 956px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 856px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 756px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 656px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 556px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 456px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 356px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 256px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 156px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + right: 10px; + left: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { + background-color: #111111; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: none; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-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); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css new file mode 100644 index 00000000..f4ede63f --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-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)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/docs/_static/bootstrap-2.3.2/css/bootstrap.css b/docs/_static/bootstrap-2.3.2/css/bootstrap.css new file mode 100644 index 00000000..b725064a --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap.css @@ -0,0 +1,6167 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -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; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]: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; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-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 linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.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 th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.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; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 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 #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-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-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + 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.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.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: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + 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-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.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 { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css b/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css new file mode 100644 index 00000000..b6428e69 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-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}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]: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}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.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;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left: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 #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.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:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;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-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.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{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png b/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae GIT binary patch literal 8777 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 B7G?kd literal 0 HcmV?d00001 diff --git a/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png b/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png new file mode 100644 index 0000000000000000000000000000000000000000..a9969993201f9cee63cf9f49217646347297b643 GIT binary patch literal 12799 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 literal 0 HcmV?d00001 diff --git a/docs/_static/bootstrap-2.3.2/js/bootstrap.js b/docs/_static/bootstrap-2.3.2/js/bootstrap.js new file mode 100644 index 00000000..638bb187 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/js/bootstrap.js @@ -0,0 +1,2287 @@ +/* =================================================== + * bootstrap-transition.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $(function () { + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-alert.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT NO CONFLICT + * ================= */ + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + /* ALERT DATA-API + * ============== */ + + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + +}(window.$jqTheme || window.jQuery); +/* ============================================================ + * bootstrap-button.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON NO CONFLICT + * ================== */ + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + /* BUTTON DATA-API + * =============== */ + + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-carousel.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + + , to: function (pos) { + var activeIndex = this.getActiveIndex() + , that = this + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('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() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================= + * bootstrap-collapse.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================ + * bootstrap-dropdown.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('