From 1c7ad448e962dbe7e0255ccad8232d4358f6db61 Mon Sep 17 00:00:00 2001 From: jonasjucker Date: Wed, 12 Feb 2025 10:18:02 +0000 Subject: [PATCH] deploy: 25af700114ec84c4c14584e136fe328e95cb0fab --- 404.html | 4 +-- SUMMARY/index.html | 8 ++--- assets/stylesheets/main.8608ea7d.min.css | 1 + assets/stylesheets/main.8608ea7d.min.css.map | 1 + compile_run/index.html | 16 ++++------ dependencies/index.html | 10 +++--- development/index.html | 19 ++++++----- index.html | 8 ++--- release_notes/index.html | 8 ++--- search/search_index.json | 2 +- sitemap.xml | 30 +++++++++--------- sitemap.xml.gz | Bin 353 -> 353 bytes testing/index.html | 8 ++--- user_manual/SUMMARY/index.html | 8 ++--- user_manual/index.html | 8 ++--- .../index.html | 8 ++--- .../index.html | 8 ++--- .../user_manual_03_fortran_modules/index.html | 8 ++--- .../user_manual_04_python_modules/index.html | 8 ++--- .../index.html | 8 ++--- .../user_manual_06_namelist_input/index.html | 8 ++--- 21 files changed, 87 insertions(+), 92 deletions(-) create mode 100644 assets/stylesheets/main.8608ea7d.min.css create mode 100644 assets/stylesheets/main.8608ea7d.min.css.map diff --git a/404.html b/404.html index ef6dc225..1aaee6df 100644 --- a/404.html +++ b/404.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + diff --git a/SUMMARY/index.html b/SUMMARY/index.html index 9fa019cc..3dc2d152 100644 --- a/SUMMARY/index.html +++ b/SUMMARY/index.html @@ -14,7 +14,7 @@ - + @@ -22,7 +22,7 @@ - + @@ -782,7 +782,7 @@

SUMMARY

- February 11, 2025 + February 12, 2025 @@ -792,7 +792,7 @@

SUMMARY

- February 11, 2025 + February 12, 2025 diff --git a/assets/stylesheets/main.8608ea7d.min.css b/assets/stylesheets/main.8608ea7d.min.css new file mode 100644 index 00000000..407e7f0b --- /dev/null +++ b/assets/stylesheets/main.8608ea7d.min.css @@ -0,0 +1 @@ +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff73;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6;overflow-wrap:break-word}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset h5 code{text-transform:none}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol ol ol ol,.md-typeset ul ol ol ol{list-style-type:upper-alpha}.md-typeset ol ol ol ol ol,.md-typeset ul ol ol ol ol{list-style-type:upper-roman}.md-typeset ol[type],.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block;margin:0 auto}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-typeset .md-author{border-radius:100%;display:block;flex-shrink:0;height:1.6rem;overflow:hidden;position:relative;transition:color 125ms,transform 125ms;width:1.6rem}.md-typeset .md-author img{display:block}.md-typeset .md-author--more{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.md-typeset .md-author--long{height:2.4rem;width:2.4rem}.md-typeset a.md-author{transform:scale(1)}.md-typeset a.md-author img{border-radius:100%;filter:grayscale(100%) opacity(75%);transition:filter 125ms}.md-typeset a.md-author:focus,.md-typeset a.md-author:hover{transform:scale(1.1);z-index:1}.md-typeset a.md-author:focus img,.md-typeset a.md-author:hover img{filter:grayscale(0)}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.no-js .md-banner__button{display:none}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.984375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .md-code__content{display:grid}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{display:flex;flex-wrap:wrap;place-content:baseline center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}@media print{.md-feedback{display:none}}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;opacity:.7}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:focus,.md-typeset .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-left:1rem;margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem;margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__option>input{bottom:0}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-meta{color:var(--md-default-fg-color--light);font-size:.7rem;line-height:1.3}.md-meta__list{display:inline-flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.md-meta__item:not(:last-child):after{content:"ยท";margin-left:.2rem;margin-right:.2rem}.md-meta__link{color:var(--md-typeset-a-color)}.md-meta__link:focus,.md-meta__link:hover{color:var(--md-accent-fg-color)}.md-draft{background-color:#ff1744;border-radius:.125em;color:#fff;display:inline-block;font-weight:700;padding-left:.5714285714em;padding-right:.5714285714em}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{color:var(--md-default-fg-color--light);display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__link{align-items:flex-start;display:flex;gap:.4rem;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active,.md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.md-nav__link .md-ellipsis{position:relative}[dir=ltr] .md-nav__link .md-icon:last-child{margin-left:auto}[dir=rtl] .md-nav__link .md-icon:last-child{margin-right:auto}.md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em;position:relative}.md-nav__link[for]:focus,.md-nav__link[for]:hover,.md-nav__link[href]:focus,.md-nav__link[href]:hover{color:var(--md-accent-fg-color);cursor:pointer}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__container>.md-nav__link{margin-top:0}.md-nav__container>.md-nav__link:first-child{flex-grow:1;min-width:0}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.234375em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest)}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:focus,.md-nav--primary .md-nav__item--active>.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link svg{margin-top:.1em}.md-nav--primary .md-nav__link>.md-nav__link{padding:0}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.984375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav{margin-bottom:-.4rem}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--secondary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--secondary .md-nav__list{padding-right:.6rem}.md-nav--secondary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--secondary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--secondary .md-nav__item>.md-nav__link{margin-left:.4rem}}@media screen and (min-width:76.25em){.md-nav{margin-bottom:-.4rem;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--primary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--primary .md-nav__list{padding-right:.6rem}.md-nav--primary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--primary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--primary .md-nav__item>.md-nav__link{margin-left:.4rem}.md-nav__toggle~.md-nav{display:grid;grid-template-rows:minmax(.4rem,0fr);opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.md-nav__toggle.md-toggle--indeterminate~.md-nav,.md-nav__toggle:checked~.md-nav{grid-template-rows:minmax(.4rem,1fr);opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.md-nav__toggle.md-toggle--indeterminate~.md-nav{transition:none}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700}.md-nav__item--section>.md-nav__link[for]{color:var(--md-default-fg-color--light)}.md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav__item--section>.md-nav__link .md-icon,.md-nav__item--section>.md-nav__link>[for]{display:none}[dir=ltr] .md-nav__item--section>.md-nav{margin-left:-.6rem}[dir=rtl] .md-nav__item--section>.md-nav{margin-right:-.6rem}.md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s;width:.9rem}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;border-radius:100%;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;vertical-align:-.1rem;width:100%}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-toggle--indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);margin-top:0;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}[dir=ltr] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-left:-.6rem}[dir=rtl] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-right:-.6rem}.md-nav--lifted>.md-nav__list>.md-nav__item>[for]{color:var(--md-default-fg-color--light)}.md-nav--lifted .md-nav[data-md-level="1"]{grid-template-rows:minmax(.4rem,1fr);opacity:1;visibility:visible}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{overflow:visible;padding-bottom:0}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}.md-pagination{font-size:.8rem;font-weight:700;gap:.4rem}.md-pagination,.md-pagination>*{align-items:center;display:flex;justify-content:center}.md-pagination>*{border-radius:.2rem;height:1.8rem;min-width:1.8rem;text-align:center}.md-pagination__current{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light)}.md-pagination__link{transition:color 125ms,background-color 125ms}.md-pagination__link:focus,.md-pagination__link:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-pagination__link:focus svg,.md-pagination__link:hover svg{color:var(--md-accent-fg-color)}.md-pagination__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-pagination__link svg{fill:currentcolor;color:var(--md-default-fg-color--lighter);display:block;max-height:100%;width:1.2rem}.md-post__back{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin-bottom:1.2rem;padding-bottom:1.2rem}@media screen and (max-width:76.234375em){.md-post__back{display:none}}[dir=rtl] .md-post__back svg{transform:scaleX(-1)}.md-post__authors{display:flex;flex-direction:column;gap:.6rem;margin:0 .6rem 1.2rem}.md-post .md-post__meta a{transition:color 125ms}.md-post .md-post__meta a:focus,.md-post .md-post__meta a:hover{color:var(--md-accent-fg-color)}.md-post__title{color:var(--md-default-fg-color--light);font-weight:700}.md-post--excerpt{margin-bottom:3.2rem}.md-post--excerpt .md-post__header{align-items:center;display:flex;gap:.6rem;min-height:1.6rem}.md-post--excerpt .md-post__authors{align-items:center;display:inline-flex;flex-direction:row;gap:.2rem;margin:0;min-height:2.4rem}[dir=ltr] .md-post--excerpt .md-post__meta .md-meta__list{margin-right:.4rem}[dir=rtl] .md-post--excerpt .md-post__meta .md-meta__list{margin-left:.4rem}.md-post--excerpt .md-post__content>:first-child{--md-scroll-margin:6rem;margin-top:0}.md-post>.md-nav--secondary{margin:1em 0}.md-profile{align-items:center;display:flex;font-size:.7rem;gap:.6rem;line-height:1.4;width:100%}.md-profile__description{flex-grow:1}.md-content--post{display:flex}@media screen and (max-width:76.234375em){.md-content--post{flex-flow:column-reverse}}.md-content--post>.md-content__inner{flex-grow:1;min-width:0}@media screen and (min-width:76.25em){[dir=ltr] .md-content--post>.md-content__inner{margin-left:1.2rem}[dir=rtl] .md-content--post>.md-content__inner{margin-right:1.2rem}}@media screen and (max-width:76.234375em){.md-sidebar.md-sidebar--post{padding:0;position:static;width:100%}.md-sidebar.md-sidebar--post .md-sidebar__scrollwrap{overflow:visible}.md-sidebar.md-sidebar--post .md-sidebar__inner{padding:0}.md-sidebar.md-sidebar--post .md-post__meta{margin-left:.6rem;margin-right:.6rem}.md-sidebar.md-sidebar--post .md-nav__item{border:none;display:inline}.md-sidebar.md-sidebar--post .md-nav__list{display:inline-flex;flex-wrap:wrap;gap:.6rem;padding-bottom:.6rem;padding-top:.6rem}.md-sidebar.md-sidebar--post .md-nav__link{padding:0}.md-sidebar.md-sidebar--post .md-nav{height:auto;margin-bottom:0;position:static}}:root{--md-progress-value:0;--md-progress-delay:400ms}.md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:#0000008a;cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.234375em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem #0000;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:#00000042;border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:#ffffff1f}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem #00000012;color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:#0000;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::placeholder{transition:color .25s}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.984375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:#0000}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>.md-icon{margin-left:.2rem}[dir=rtl] .md-search__options>.md-icon{margin-right:.2rem}.md-search__options>.md-icon{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>.md-icon:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.984375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more>summary{cursor:pointer;display:block;outline:none;position:sticky;scroll-snap-align:start;top:0;z-index:1}.md-search-result__more>summary::marker{display:none}.md-search-result__more>summary::-webkit-details-marker{display:none}.md-search-result__more>summary>div{color:var(--md-typeset-a-color);font-size:.64rem;padding:.75em .8rem;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more>summary>div{padding-left:2.2rem}[dir=rtl] .md-search-result__more>summary>div{padding-right:2.2rem}}.md-search-result__more>summary:focus>div,.md-search-result__more>summary:hover>div{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more[open]>summary{background-color:var(--md-default-bg-color)}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.984375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result .md-typeset{color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.6}.md-search-result .md-typeset h1{color:var(--md-default-fg-color);font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}.md-search-result .md-typeset h1 mark{text-decoration:none}.md-search-result .md-typeset h2{color:var(--md-default-fg-color);font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result .md-typeset h2 mark{text-decoration:none}.md-search-result__terms{color:var(--md-default-fg-color);display:block;font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color);text-decoration:underline}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.234375em){.md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-source-file{margin:1em 0}[dir=ltr] .md-source-file__fact{margin-right:.6rem}[dir=rtl] .md-source-file__fact{margin-left:.6rem}.md-source-file__fact{align-items:center;color:var(--md-default-fg-color--light);display:inline-flex;font-size:.68rem;gap:.3rem}.md-source-file__fact .md-icon{flex-shrink:0;margin-bottom:.05rem}[dir=ltr] .md-source-file__fact .md-author{float:left}[dir=rtl] .md-source-file__fact .md-author{float:right}.md-source-file__fact .md-author{margin-right:.2rem}.md-source-file__fact svg{width:.9rem}:root{--md-status:url('data:image/svg+xml;charset=utf-8,');--md-status--new:url('data:image/svg+xml;charset=utf-8,');--md-status--deprecated:url('data:image/svg+xml;charset=utf-8,');--md-status--encrypted:url('data:image/svg+xml;charset=utf-8,')}.md-status:after{background-color:var(--md-default-fg-color--light);content:"";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.md-status:hover:after{background-color:currentcolor}.md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.md-status--encrypted:after{-webkit-mask-image:var(--md-status--encrypted);mask-image:var(--md-status--encrypted)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.234375em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}[dir=ltr] .md-tabs__link svg{margin-right:.4rem}[dir=rtl] .md-tabs__link svg{margin-left:.4rem}.md-tabs__link svg{fill:currentcolor;height:1.3em}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags:not([hidden]){display:inline-flex;flex-wrap:wrap;gap:.5em;margin-bottom:.75em;margin-top:-.125em}.md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}:root{--md-annotation-bg-icon:url('data:image/svg+xml;charset=utf-8,');--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,')}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.md-tooltip--inline{font-weight:700;-webkit-user-select:none;user-select:none;width:auto}.md-tooltip--inline:not(.md-tooltip--active){transform:translateY(.2rem) scale(.9)}.md-tooltip--inline .md-tooltip__inner{font-size:.5rem;padding:.2rem .4rem}[hidden]+.md-tooltip--inline{display:none}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-style:normal;font-weight:400;outline:none;text-align:initial;vertical-align:text-bottom;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.md-annotation:not([hidden]){display:inline-block;line-height:1.25}.md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.md-annotation__index{width:2.2ch}[data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.md-annotation__index:after,.md-annotation__index:before{content:"";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.md-typeset .md-annotation-list{counter-reset:xxx;list-style:none}.md-typeset .md-annotation-list li{position:relative}[dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}[dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(xxx);counter-increment:xxx;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}:root{--md-tooltip-width:20rem;--md-tooltip-tail:0.3rem}.md-tooltip2{-webkit-backface-visibility:hidden;backface-visibility:hidden;color:var(--md-default-fg-color);font-family:var(--md-text-font-family);opacity:0;pointer-events:none;position:absolute;top:calc(var(--md-tooltip-host-y) + var(--md-tooltip-y));transform:translateY(-.4rem);transform-origin:calc(var(--md-tooltip-host-x) + var(--md-tooltip-x)) 0;transition:transform 0ms .25s,opacity .25s,z-index .25s;width:100%;z-index:0}.md-tooltip2:before{border-left:var(--md-tooltip-tail) solid #0000;border-right:var(--md-tooltip-tail) solid #0000;content:"";display:block;left:clamp(1.5 * .8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-tail),100vw - 2 * var(--md-tooltip-tail) - 1.5 * .8rem);position:absolute;z-index:1}.md-tooltip2--top:before{border-top:var(--md-tooltip-tail) solid var(--md-default-bg-color);bottom:calc(var(--md-tooltip-tail)*-1 + .025rem);filter:drop-shadow(0 1px 0 hsla(0,0%,0%,.05))}.md-tooltip2--bottom:before{border-bottom:var(--md-tooltip-tail) solid var(--md-default-bg-color);filter:drop-shadow(0 -1px 0 hsla(0,0%,0%,.05));top:calc(var(--md-tooltip-tail)*-1 + .025rem)}.md-tooltip2--active{opacity:1;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.5,1),opacity .25s,z-index 0ms;z-index:2}.md-tooltip2__inner{scrollbar-gutter:stable;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);max-height:40vh;max-width:calc(100vw - 1.6rem);position:relative;scrollbar-width:thin}.md-tooltip2__inner::-webkit-scrollbar{height:.2rem;width:.2rem}.md-tooltip2__inner::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-tooltip2__inner::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}[role=tooltip]>.md-tooltip2__inner{font-size:.5rem;font-weight:700;left:clamp(.8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-width)/2,100vw - var(--md-tooltip-width) - .8rem);max-width:min(100vw - 2 * .8rem,400px);padding:.2rem .4rem;-webkit-user-select:none;user-select:none;width:-moz-fit-content;width:fit-content}.md-tooltip2__inner.md-typeset>:first-child{margin-top:0}.md-tooltip2__inner.md-typeset>:last-child{margin-bottom:0}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__alias{margin-left:.3rem;opacity:.7}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.075rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid;transition:box-shadow 125ms}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition:focus-within,.md-typeset details:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset .admonition.note,.md-typeset details.note{border-color:#448aff}.md-typeset .admonition.note:focus-within,.md-typeset details.note:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .note>.admonition-title,.md-typeset .note>summary{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{border-color:#00b0ff}.md-typeset .admonition.abstract:focus-within,.md-typeset details.abstract:focus-within{box-shadow:0 0 0 .2rem #00b0ff1a}.md-typeset .abstract>.admonition-title,.md-typeset .abstract>summary{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{border-color:#00b8d4}.md-typeset .admonition.info:focus-within,.md-typeset details.info:focus-within{box-shadow:0 0 0 .2rem #00b8d41a}.md-typeset .info>.admonition-title,.md-typeset .info>summary{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{border-color:#00bfa5}.md-typeset .admonition.tip:focus-within,.md-typeset details.tip:focus-within{box-shadow:0 0 0 .2rem #00bfa51a}.md-typeset .tip>.admonition-title,.md-typeset .tip>summary{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{border-color:#00c853}.md-typeset .admonition.success:focus-within,.md-typeset details.success:focus-within{box-shadow:0 0 0 .2rem #00c8531a}.md-typeset .success>.admonition-title,.md-typeset .success>summary{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{border-color:#64dd17}.md-typeset .admonition.question:focus-within,.md-typeset details.question:focus-within{box-shadow:0 0 0 .2rem #64dd171a}.md-typeset .question>.admonition-title,.md-typeset .question>summary{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{border-color:#ff9100}.md-typeset .admonition.warning:focus-within,.md-typeset details.warning:focus-within{box-shadow:0 0 0 .2rem #ff91001a}.md-typeset .warning>.admonition-title,.md-typeset .warning>summary{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{border-color:#ff5252}.md-typeset .admonition.failure:focus-within,.md-typeset details.failure:focus-within{box-shadow:0 0 0 .2rem #ff52521a}.md-typeset .failure>.admonition-title,.md-typeset .failure>summary{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{border-color:#ff1744}.md-typeset .admonition.danger:focus-within,.md-typeset details.danger:focus-within{box-shadow:0 0 0 .2rem #ff17441a}.md-typeset .danger>.admonition-title,.md-typeset .danger>summary{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{border-color:#f50057}.md-typeset .admonition.bug:focus-within,.md-typeset details.bug:focus-within{box-shadow:0 0 0 .2rem #f500571a}.md-typeset .bug>.admonition-title,.md-typeset .bug>summary{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{border-color:#7c4dff}.md-typeset .admonition.example:focus-within,.md-typeset details.example:focus-within{box-shadow:0 0 0 .2rem #7c4dff1a}.md-typeset .example>.admonition-title,.md-typeset .example>summary{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{border-color:#9e9e9e}.md-typeset .admonition.quote:focus-within,.md-typeset details.quote:focus-within{box-shadow:0 0 0 .2rem #9e9e9e1a}.md-typeset .quote>.admonition-title,.md-typeset .quote>summary{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target,.md-typeset h2:target,.md-typeset h3:target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.md-typeset div.arithmatex{margin:0 -.8rem}.md-typeset div.arithmatex>*{width:min-content}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset div.arithmatex mjx-assistive-mml{height:0}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem;overflow:hidden}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{--md-icon-size:1.125em;display:inline-flex;height:var(--md-icon-size);vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:var(--md-icon-size)}.md-typeset .lg,.md-typeset .xl,.md-typeset .xxl,.md-typeset .xxxl{vertical-align:text-bottom}.md-typeset .middle{vertical-align:middle}.md-typeset .lg{--md-icon-size:1.5em}.md-typeset .xl{--md-icon-size:2.25em}.md-typeset .xxl{--md-icon-size:3em}.md-typeset .xxxl{--md-icon-size:4em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying]{display:initial}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.984375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"โŽ‡";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"โŒ˜";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"โŒƒ";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"โ—†";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"โŒฅ";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"โ‡ง";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"โ–";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"โŠž";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"โ†“";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"โ†";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"โ†’";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"โ†‘";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"โŒซ";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"โ‡ค";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"โ‡ช";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"โŒง";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"โ˜ฐ";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"โŒฆ";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"โ";padding-right:.4em}.md-typeset .keys .key-end:before{content:"โค“";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"โŽ‹";padding-right:.4em}.md-typeset .keys .key-home:before{content:"โค’";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"โŽ€";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"โ‡Ÿ";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"โ‡ž";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"โŽ™";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"โ‡ฅ";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"โŒค";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"โŽ";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.md-typeset .tabbed-labels>label>[href]:first-child{color:inherit}.md-typeset .tabbed-labels--linked>label{padding:0}.md-typeset .tabbed-labels--linked>label>a{display:block;padding:.78125em 1.25em .625em}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}@media print{.giscus,[id=__comments]{display:none}}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.mermaid{line-height:normal;margin:1em 0}.md-typeset .grid{grid-gap:.4rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));margin:1em 0}.md-typeset .grid.cards>ol,.md-typeset .grid.cards>ul{display:contents}.md-typeset .grid.cards>ol>li,.md-typeset .grid.cards>ul>li,.md-typeset .grid>.card{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem;display:block;margin:0;padding:.8rem;transition:border .25s,box-shadow .25s}.md-typeset .grid.cards>ol>li:focus-within,.md-typeset .grid.cards>ol>li:hover,.md-typeset .grid.cards>ul>li:focus-within,.md-typeset .grid.cards>ul>li:hover,.md-typeset .grid>.card:focus-within,.md-typeset .grid>.card:hover{border-color:#0000;box-shadow:var(--md-shadow-z2)}.md-typeset .grid.cards>ol>li>hr,.md-typeset .grid.cards>ul>li>hr,.md-typeset .grid>.card>hr{margin-bottom:1em;margin-top:1em}.md-typeset .grid.cards>ol>li>:first-child,.md-typeset .grid.cards>ul>li>:first-child,.md-typeset .grid>.card>:first-child{margin-top:0}.md-typeset .grid.cards>ol>li>:last-child,.md-typeset .grid.cards>ul>li>:last-child,.md-typeset .grid>.card>:last-child{margin-bottom:0}.md-typeset .grid>*,.md-typeset .grid>.admonition,.md-typeset .grid>.highlight>*,.md-typeset .grid>.highlighttable,.md-typeset .grid>.md-typeset details,.md-typeset .grid>details,.md-typeset .grid>pre{margin-bottom:0;margin-top:0}.md-typeset .grid>.highlight>pre:only-child,.md-typeset .grid>.highlight>pre>code,.md-typeset .grid>.highlighttable,.md-typeset .grid>.highlighttable>tbody,.md-typeset .grid>.highlighttable>tbody>tr,.md-typeset .grid>.highlighttable>tbody>tr>.code,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre>code{height:100%}.md-typeset .grid>.tabbed-set{margin-bottom:0;margin-top:0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/assets/stylesheets/main.8608ea7d.min.css.map b/assets/stylesheets/main.8608ea7d.min.css.map new file mode 100644 index 00000000..d21cbb23 --- /dev/null +++ b/assets/stylesheets/main.8608ea7d.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/templates/assets/stylesheets/main/components/_meta.scss","../../../../src/templates/assets/stylesheets/main.scss","src/templates/assets/stylesheets/main/_resets.scss","src/templates/assets/stylesheets/main/_colors.scss","src/templates/assets/stylesheets/main/_icons.scss","src/templates/assets/stylesheets/main/_typeset.scss","src/templates/assets/stylesheets/utilities/_break.scss","src/templates/assets/stylesheets/main/components/_author.scss","src/templates/assets/stylesheets/main/components/_banner.scss","src/templates/assets/stylesheets/main/components/_base.scss","src/templates/assets/stylesheets/main/components/_clipboard.scss","src/templates/assets/stylesheets/main/components/_code.scss","src/templates/assets/stylesheets/main/components/_consent.scss","src/templates/assets/stylesheets/main/components/_content.scss","src/templates/assets/stylesheets/main/components/_dialog.scss","src/templates/assets/stylesheets/main/components/_feedback.scss","src/templates/assets/stylesheets/main/components/_footer.scss","src/templates/assets/stylesheets/main/components/_form.scss","src/templates/assets/stylesheets/main/components/_header.scss","node_modules/material-design-color/material-color.scss","src/templates/assets/stylesheets/main/components/_nav.scss","src/templates/assets/stylesheets/main/components/_pagination.scss","src/templates/assets/stylesheets/main/components/_post.scss","src/templates/assets/stylesheets/main/components/_progress.scss","src/templates/assets/stylesheets/main/components/_search.scss","src/templates/assets/stylesheets/main/components/_select.scss","src/templates/assets/stylesheets/main/components/_sidebar.scss","src/templates/assets/stylesheets/main/components/_source.scss","src/templates/assets/stylesheets/main/components/_status.scss","src/templates/assets/stylesheets/main/components/_tabs.scss","src/templates/assets/stylesheets/main/components/_tag.scss","src/templates/assets/stylesheets/main/components/_tooltip.scss","src/templates/assets/stylesheets/main/components/_tooltip2.scss","src/templates/assets/stylesheets/main/components/_top.scss","src/templates/assets/stylesheets/main/components/_version.scss","src/templates/assets/stylesheets/main/extensions/markdown/_admonition.scss","src/templates/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/templates/assets/stylesheets/main/extensions/markdown/_toc.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_keys.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/templates/assets/stylesheets/main/integrations/_giscus.scss","src/templates/assets/stylesheets/main/integrations/_mermaid.scss","src/templates/assets/stylesheets/main/modifiers/_grid.scss","src/templates/assets/stylesheets/main/modifiers/_inline.scss"],"names":[],"mappings":"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AA,8ClCy4GN,CkCr4GI,kFACE,alCu4GN,CkC55GE,4DACE,oBlC+5GJ,CkC55GI,sFACE,gClC85GN,CkCz5GE,oEACE,0BlC45GJ,CkCz5GI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ClC25GN,CkCv5GI,gFACE,alCy5GN,CkC96GE,4DACE,oBlCi7GJ,CkC96GI,sFACE,gClCg7GN,CkC36GE,oEACE,0BlC86GJ,CkC36GI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ClC66GN,CkCz6GI,gFACE,alC26GN,CkCh8GE,0DACE,oBlCm8GJ,CkCh8GI,oFACE,gClCk8GN,CkC77GE,kEACE,0BlCg8GJ,CkC77GI,gFACE,wBAlBG,CAmBH,oDAAA,CAAA,4ClC+7GN,CkC37GI,8EACE,alC67GN,CkCl9GE,oDACE,oBlCq9GJ,CkCl9GI,8EACE,gClCo9GN,CkC/8GE,4DACE,0BlCk9GJ,CkC/8GI,0EACE,wBAlBG,CAmBH,iDAAA,CAAA,yClCi9GN,CkC78GI,wEACE,alC+8GN,CkCp+GE,4DACE,oBlCu+GJ,CkCp+GI,sFACE,gClCs+GN,CkCj+GE,oEACE,0BlCo+GJ,CkCj+GI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ClCm+GN,CkC/9GI,gFACE,alCi+GN,CkCt/GE,wDACE,oBlCy/GJ,CkCt/GI,kFACE,gClCw/GN,CkCn/GE,gEACE,0BlCs/GJ,CkCn/GI,8EACE,wBAlBG,CAmBH,mDAAA,CAAA,2ClCq/GN,CkCj/GI,4EACE,alCm/GN,CmCvpHA,MACE,qMnC0pHF,CmCjpHE,sBAEE,uCAAA,CADA,gBnCqpHJ,CmCjpHI,mCACE,anCmpHN,CmCppHI,mCACE,cnCmpHN,CmC/oHM,4BACE,sBnCipHR,CmC9oHQ,mCACE,gCnCgpHV,CmC5oHQ,2DACE,SAAA,CAEA,uBAAA,CADA,enC+oHV,CmC1oHQ,yGACE,SAAA,CACA,uBnC4oHV,CmCxoHQ,yCACE,YnC0oHV,CmCnoHE,0BACE,eAAA,CACA,enCqoHJ,CmCloHI,+BACE,oBnCooHN,CmC/nHE,gDACE,YnCioHJ,CmC7nHE,8BAIE,+BA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","file":"main.css"} \ No newline at end of file diff --git a/compile_run/index.html b/compile_run/index.html index de2b0cfb..6a6f14a7 100644 --- a/compile_run/index.html +++ b/compile_run/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -896,6 +896,8 @@

Runningpython/lib @@ -904,12 +906,6 @@

Runningrun_scripts . Just adapt them to your needs!

-

Check

-
    -
  1. that you haven't got any error message at runtime,
  2. -
  3. that you got a file in NetCDF format (.nc), and
  4. -
  5. in case of use with COSMO that Int2lm is able to read these 2 files
  6. -
@@ -932,7 +928,7 @@

Check& - February 11, 2025 + February 12, 2025 @@ -942,7 +938,7 @@

Check& - February 11, 2025 + February 12, 2025 diff --git a/dependencies/index.html b/dependencies/index.html index ffc10605..05710455 100644 --- a/dependencies/index.html +++ b/dependencies/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -853,8 +853,6 @@

Python-CDOOn the CSCS machines

-

All the required libraries are already installed on the CSCS machines.

On the DKRZ machine Levante

All the required libraries are already installed on the DKRZ machine.

@@ -879,7 +877,7 @@

On the DKRZ machine Levante - February 11, 2025 + February 12, 2025 @@ -889,7 +887,7 @@

On the DKRZ machine Levante - February 11, 2025 + February 12, 2025 diff --git a/development/index.html b/development/index.html index b31eb8a0..30caf683 100644 --- a/development/index.html +++ b/development/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -870,14 +870,13 @@

Git and GithubGithub web interface . Outstanding bugs and requested features are tracked using the Issues section of the Github repository. Additionally, automated testing of newly developed features is integrated into the Github interface using the Jenkins CI tool.

Main branches

-

The master branch only contains code which are released versions. -All commits on the master branch are tagged (git tag -a vX.Y.Z). -Only the core development team is allowed to modify the master branch.

+

The master branch is protected and only the core development team is allowed to modify the master branch. +All tags and releases are based on this branch.

Supporting branches

Any new code development should be done in a topic branch. Topic branches are merged back into master by opening a pull request. Code must be peer reviewed by the source code administrator.

-

Supporting branches are removed once successfully merged in one of the master branch.

+

Supporting branches are removed once successfully merged in the master branch.

Developments with new input data sets

Any new EXTPAR code that is accompanied by a new input data file or files should be added with a simultaneous pull request in both this code repository (for the code changes) and in the extpar-input-data repository @@ -885,14 +884,14 @@

Developments with new input data the synchronization of the code and input-data repositories.

Testing new developments

Once a developer has finished developing a new feature or bug fix, they should make a -pull request on the Github repository from their topic branch into the rc-branch.
+pull request on the Github repository from their topic branch into the master-branch.
Then, they should write the following comment into the pull request conversation:

launch jenkins
 

This will start the automated testing, and the code will be compiled and tested on co2 (ETH) and Levante (DKRZ).

If the tests fail, then the developer should fix the issues and resubmit the testing on Jenkins.
Once all of the tests are passing, then they should notify the source code administrator that the pull -request is ready for review and merging into the rc-branch.

+request is ready for review and merging into the master-branch.

Fortran Code

Logging

In case you want to add some additional prints in EXTPAR, please use the logger described below.

@@ -1029,7 +1028,7 @@

Coding rules and best practices - February 11, 2025 + February 12, 2025 @@ -1039,7 +1038,7 @@

Coding rules and best practices - February 11, 2025 + February 12, 2025 diff --git a/index.html b/index.html index 106deed1..232a19da 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -1099,7 +1099,7 @@

Support - February 11, 2025 + February 12, 2025 @@ -1109,7 +1109,7 @@

Support - February 11, 2025 + February 12, 2025 diff --git a/release_notes/index.html b/release_notes/index.html index 8ec086ba..13a5602d 100644 --- a/release_notes/index.html +++ b/release_notes/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -1967,7 +1967,7 @@

DWD Extpar version 2.10 to - February 11, 2025 + February 12, 2025 @@ -1977,7 +1977,7 @@

DWD Extpar version 2.10 to - February 11, 2025 + February 12, 2025 diff --git a/search/search_index.json b/search/search_index.json index 64b24325..7950d367 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#general-information","title":"General Information","text":"

EXTPAR (External Parameters for Numerical Weather Prediction and Climate Application) is an official software of the COSMO Consortium . It is used to prepare the external parameter data files that are used as input for the COSMO and the ICON model.

The code is written in Fortran 90 and in Python. The Python scripts use CDO (Climate Data Operators) for the most compute-intensive parts. The code is also accelerated in some places with OpenMP parallelization.

Once compiled, the code generates 6 Fortran executables and 9 Python scripts, which can be run simultaneously except for the final extpar_consistency_check.exe, which is used to tie together all the external parameter results into one output file.

Information about the latest changes can be found in the Release Notes on GitHub .

The technical and scientific documentation can be found in the User and Implementation Guide.

"},{"location":"#quick-start","title":"Quick Start","text":""},{"location":"#container","title":"Container","text":"

The easiest way to use EXTPAR is through the container provided with Dockerfile . A ready-to-use image can be downloaded from C2SM docker hub or even simpler via CLI:

docker pull c2sm/extpar:tagname\n

Alternatively, an image is provided as an asset of each release

"},{"location":"#wrapextpar","title":"WrapExtpar","text":"

The image provides a wrapper that only requires to set basic options, all other details are handled by the wrapper.

The wrapper needs two different kinds of input:

1. EXTPAR settings as JSON, see official docs

{\n  \"extpar\": {\n    \"igrid_type\": 1,\n    \"iaot_type\": 1,\n    \"ilu_type\": 1,\n    \"ialb_type\": 1,\n    \"isoil_type\": 1,\n    \"itopo_type\": 1,\n    \"lsgls\": false,\n    \"lfilter_oro\": false,\n    \"lurban\": false\n  }\n}\n

2. Execution options

  --input-grid INPUT_GRID\n                        COSMO: Fortran Namelist \"INPUT_COSMO_GRID\", ICON: Icon\n                        grid file\n  --raw-data-path RAW_DATA_PATH\n                        Path to folder \"linked_data\" of exptar-input-data\n                        repository\n  --run-dir RUN_DIR     Folder for running EXTPAR\n  --account ACCOUNT     Account for slurm job\n  --host HOST           Host\n  --no-batch-job        Run jobscript not as batch job\n

An example call could look like

docker run -v /c2sm-data/extpar-input-data:/data \\\n           -v /icon-grids:/grid \\\n           -v /my_local_dir:/work \\\n           extpar \\ \n           python3 -m extpar.WrapExtpar \\\n           --run-dir /work \\\n           --raw-data-path /data/linked_data \\\n           --account none \\\n           --no-batch-job \\\n           --host docker \\\n           --input-grid /grid/icon_grid.nc \\\n           --extpar-config /work/config.json\n

Below is a more detailed explanation about the mounted volumes:

  • -v /c2sm-data/extpar-input-data:/data: Mounts the input data at /data inside the container. This should be aligned with the --raw-data-path argument.
  • -v /icon-grids:/grid: Mounts a local folder with icon grids under /grid inside the container. This should be aligned with the --input-grid argument.
  • -v /my_local_dir:/work: Mounts a local folder for EXTPAR output at /work inside the container. This should be aligned with the --run-dir argument.
"},{"location":"#individual-executables","title":"Individual Executables","text":"

For those who require a more custom setup of EXTPAR or need settings that are not possible to specify through the wrapper, you can run each executable within the image too. For example:

docker run extpar bash -c \"extpar_topo_to_buffer\"\n
"},{"location":"#bare-metal-build-on-levante","title":"Bare Metal Build on Levante","text":"

The installation steps are

git clone --recursive git@github.com:C2SM/extpar.git\ncd extpar\ngit submodule update\n./configure.levante.gcc\nsource modules.env\nmake -j 4\n

Furthermore copy all the .exe and .py files from bin to the directory in which the namelist and all required input-data is present.

You do then have two choices to run EXTPAR:

  1. configure the PYTHONPATH variable such that it includes to the python/lib folder of the source repository
  2. build and install a python package for your user account
"},{"location":"#installing-extpar","title":"Installing EXTPAR","text":"

After you prepared EXTPAR (see above), you have two options to install and run the software.

"},{"location":"#option-1-pythonpath","title":"Option 1: PYTHONPATH","text":"

If you like to run the EXTPAR scripts without installing a package, make sure to have the python/lib folder in your PYTHONPATH variable. You can do this via

export PYTHONPATH=$PYTHONPATH:$(pwd)/python/lib\n

Afterwards you can cd into the bin/ directory and run the corresponding executables, e.g.

cd bin\n./extpar_aot_to_buffer.exe\n

For more detailed compilation instructions see: compile_run

"},{"location":"#option-2-build-and-install-a-python-package","title":"Option 2: Build and install a python package","text":"

Alternatively you can build a python package and install it to your libraries. This has the advantages that the executables can be ran from anywhere in the system without the need to copy the executables themselves.

To build the package, now run

python setup.py sdist\n

You can then install it via

pip install dist/extpar-*.tar.gz\n

Note

If you do not have the permissions to install it into the system-wide python library, it will be installed for your user account only (you can also add the --user flag to pip to force this behaviour).

If you did not install extpar into the system libraries, make sure that the bin folder of your local user is on your PATH variable to be able to run the EXTPAR scripts. This is usually done via

export PATH=\"$HOME/.local/bin:$PATH\"\n

You can then call the functionalities of WrapExtpar.py via

python -m extpar.WrapExtpar\n

or import the script in Python via

from extpar.WrapExtpar import generate_external_parameters\n

Or you call the executable scripts in your run directory, e.g.

extpar_aot_to_buffer.exe\n
"},{"location":"#input-data","title":"Input Data","text":""},{"location":"#data-location","title":"Data Location","text":"

In order to run EXTPAR, input data files for the external parameter variables are needed. The data is provided on all supported machines:

Levante (DKRZ)co2 (ETHZ)
/work/pd1167/extpar-input-data/linked_data\n
/c2sm-data/extpar-input-data\n

The input data files are also stored in a git-LFS data repository found at: https://gitlab.dkrz.de/extpar-data/extpar-input-data . Instructions to download or update the input data files can be found in this repository. To gain access to the git-LFS input data repository, contact the EXTPAR source code administrator.

"},{"location":"#testing","title":"Testing","text":"

The EXTPAR code comes with a technical testsuite to ensure the accuracy of the results. Weekly tests run for compilers:

  • GCC

For more information about how the testsuite can be run or new test added see testsuite-documentation

"},{"location":"#information-for-developers","title":"Information for Developers","text":"

In case you want to contribute to EXTPAR please have a look at our coding rules and development workflow.

"},{"location":"#support","title":"Support","text":"

In the case of issues or questions, please create an issue on GitHub .

"},{"location":"SUMMARY/","title":"SUMMARY","text":"
  • Home
  • Compile and Run
  • Dependencies
  • Testing
  • Development
  • Release Notes
  • User Guide
"},{"location":"compile_run/","title":"Compile and Run","text":""},{"location":"compile_run/#compilation","title":"Compilation","text":"

Since Version 5.4, EXTPAR is built with an autotools based build-system. This has been necessary to accomodate for the additional C source code files and newly required libraries.

There are three options to compile Extpar:

"},{"location":"compile_run/#in-source-build","title":"In-source build","text":"
./configure.<hostname>.<compiler>\nsource modules.env  \nmake   \n
"},{"location":"compile_run/#out-of-source-build","title":"Out-of-source build","text":"
mkdir build-<my_self_defined_note>\ncd build-<my_self_defined_note>\npath/to/extpar/installation/configure.<hostname>.<compiler>\nsource modules.env  \nmake  \n
"},{"location":"compile_run/#install-binaries-only-in-external-directory","title":"Install binaries only in external directory","text":"
./configure.<hostname>.<compiler> --prefix=<my_external_directory>\nsource modules.env  \nmake install  \n

The binaries will be installed in my_external_directory/bin.

"},{"location":"compile_run/#restart-build-from-scratch","title":"Restart build from scratch","text":"
make distclean \n
"},{"location":"compile_run/#configure-for-new-machines","title":"Configure for new machines","text":"

The first step in creating a new machine setup is to take one of the existing configure wrapper scripts and adapt it to your local environment. The scripts are called configure.<hostname>.<compiler>.

"},{"location":"compile_run/#running","title":"Running","text":"

The Fortran executables

  • extpar_aot_to_buffer.exe
  • extpar_landuse_to_buffer.exe
  • exptar_soil_to_buffer.exe
  • extpar_topo_to_buffer.exe
  • extpar_flake_to_buffer.exe
  • extpar_consistency_check.exe

can simply be copied to the run/ directory.

The main python scripts

  • extpar_alb_to_buffer.py
  • extpar_cru_to_buffer.py
  • extpar_ndvi_to_buffer.py
  • extpar_emiss_to_buffer.py
  • exptar_era_to_buffer.py
  • extpar_ahf_to_buffer.py
  • extpar_isa_to_buffer.py

can be treated like the Fortran binaries and copied to the run/ directory. Make sure the namelist.py is also present in the run/ directory.

All self-written Python modules are stored in python/lib and do not need to be copied to the respective run directory, but the environment variable PYTHONPATH needs to be set to the following:

export PYTHONPATH=$PYTHONPATH:<absolute_path_to_python>/lib\n

Some runscript examples are available under run_scripts . Just adapt them to your needs!

"},{"location":"compile_run/#check","title":"Check","text":"
  1. that you haven't got any error message at runtime,
  2. that you got a file in NetCDF format (.nc), and
  3. in case of use with COSMO that Int2lm is able to read these 2 files
"},{"location":"dependencies/","title":"Dependencies","text":"

EXTPAR contains Fortran Code as well as hybrid Python-CDO scripts. Both code bases need external libraries and installations.

"},{"location":"dependencies/#libraries","title":"Libraries","text":""},{"location":"dependencies/#fortran","title":"Fortran","text":"

EXTPAR needs the following libraries for the Fortran-Code:

  • NetCDF
  • JASPER
  • PNG
  • Z LIB
"},{"location":"dependencies/#python-cdo","title":"Python-CDO","text":"

EXTPAR needs the following Python packages and installations:

  • at least Python 3.6
  • module netCDF4

The module netCDF is the Python interface to the netCDF C library. It allows the user create and manipulate netCDF files with Python. For more detailed information please visit netCDF Python .

Additionally, an installation of CDO (Climate Data Operators) is required. All necessary information about this tool can be found at CDO-MPI.

Be sure that these libraries are installed on your system or install them yourself by following the installation instructions provided with the libraries.

"},{"location":"dependencies/#on-the-cscs-machines","title":"On the CSCS machines","text":"

All the required libraries are already installed on the CSCS machines.

"},{"location":"dependencies/#on-the-dkrz-machine-levante","title":"On the DKRZ machine Levante","text":"

All the required libraries are already installed on the DKRZ machine.

"},{"location":"development/","title":"Information for EXTPAR Developers","text":""},{"location":"development/#git-and-github","title":"Git and Github","text":"

The EXTPAR code is developed using the Git version control system and the Github web interface . Outstanding bugs and requested features are tracked using the Issues section of the Github repository. Additionally, automated testing of newly developed features is integrated into the Github interface using the Jenkins CI tool.

"},{"location":"development/#main-branches","title":"Main branches","text":"

The master branch only contains code which are released versions. All commits on the master branch are tagged (git tag -a vX.Y.Z). Only the core development team is allowed to modify the master branch.

"},{"location":"development/#supporting-branches","title":"Supporting branches","text":"

Any new code development should be done in a topic branch. Topic branches are merged back into master by opening a pull request. Code must be peer reviewed by the source code administrator.

Supporting branches are removed once successfully merged in one of the master branch.

"},{"location":"development/#developments-with-new-input-data-sets","title":"Developments with new input data sets","text":"

Any new EXTPAR code that is accompanied by a new input data file or files should be added with a simultaneous pull request in both this code repository (for the code changes) and in the extpar-input-data repository (for the addition of the input data files). The topic branch for both pull requests should have the same name, in order to enable the synchronization of the code and input-data repositories.

"},{"location":"development/#testing-new-developments","title":"Testing new developments","text":"

Once a developer has finished developing a new feature or bug fix, they should make a pull request on the Github repository from their topic branch into the rc-branch. Then, they should write the following comment into the pull request conversation:

launch jenkins\n

This will start the automated testing, and the code will be compiled and tested on co2 (ETH) and Levante (DKRZ).

If the tests fail, then the developer should fix the issues and resubmit the testing on Jenkins. Once all of the tests are passing, then they should notify the source code administrator that the pull request is ready for review and merging into the rc-branch.

"},{"location":"development/#fortran-code","title":"Fortran Code","text":""},{"location":"development/#logging","title":"Logging","text":"

In case you want to add some additional prints in EXTPAR, please use the logger described below.

CALL the built-in logger-functions in order to print messages or variables in the specific logfile of each EXTPAR executable. The logger has three different levels of messages to print:

  1. logging%info(your_message): info-prints for better orientation during code execution, variables or other stuff.

  2. logging%warning(your_message): warnings, like wrong namelist-inputs, unsupported NetCDF versions or problems with some data points.

  3. logging%error(your_message, __FILE__,__LINE__): errors that occur during I/O, allocation, that requires an abort of EXTPAR.

As your_message needs to be a sequence of characters, use

WRITE(message_text,*)var_x, 'is now', var_y\n

and then

CALL logging%inf0(message_text) \n

to print the values of var_x and var_y to the logfile.

For quick debugging-prints ONLY use

WRITE(logging%fileunit,*)var_x, 'is now', var_y \n
"},{"location":"development/#coding-rules-and-best-practices","title":"Coding Rules and Best Practices","text":"
  1. All features available in Fortran 2008 as far as supported by Intel, GCC, and NAG are allowed.

  2. Use up to the allowed 132 character per line, but not more. Note that this includes comments.

  3. Indentation rules:

    Code feature Num. of indentation characters program indentation 2 type definition 2 do loops 2 if constructs 2 continuation 5 (with leading &) all directives 0
  4. Always use IMPLICIT NONE and PRIVATE/PUBLIC once only in modules header.

  5. Do not add USE statements after CONTAINS.

  6. Fortran keywords should be in capital letters with the exception of len, in, out, and inout.

  7. Do not use tabs, deprecated, or obsolete features.

  8. Do not overspecify declarations - especially if standard types are expected.

"},{"location":"development/#python-code","title":"Python Code","text":""},{"location":"development/#logging_1","title":"Logging","text":"

In case you want to add some additional prints in EXTPAR, please use the logger described below.

CALL the built-in logger-functions in order to print messages or variables in the specific logfile of each EXTPAR executable. The logger can print variables as well as strings. Use formatted strings (f') in case you want to combine variables and strings. The logger has 4 different levels of messages to print:

  1. logging.debug(your_message): Mean/Max/Min of variables needed for development, more detailed information about code execution.

  2. logging.info(your_message): info-prints for better orientation during code execution, variables or other stuff.

  3. logging.warning(your_message): warnings, like wrong namelist-inputs, unsupported NetCDF versions or problems with some data points.

  4. logging.error(your_message): errors that occur during I/O, allocation or wrong namelist parameters, that requires an abort of EXTPAR. The programm does not stop automatically after the call of logging.error, so a raise follows the logging.error()

Default logging level is info, so only messages from logging.info(), logging.warning() and logging.error() are written to the logfile. Adjust the level of the logger right at the beginning of each Python executable to level=logging.DEBUG to also print logging.debug().

"},{"location":"development/#coding-rules-and-best-practices_1","title":"Coding rules and best practices","text":"

The Python code needs to fulfill the Pep8 coding standard . A GitHub action automatically formats Python code for you.

"},{"location":"release_notes/","title":"Release notes","text":"

For the latest release notes, please see our GitHub webpage .

"},{"location":"release_notes/#514","title":"5.14","text":"
  • New buffer script extpar_cdnc_to_buffer for ICON
  • Cloud droplet number concentration from the cloud optical depth and effective radius
  • Input data:
    • modis_cdnc_climatology_Q06.nc
"},{"location":"release_notes/#513","title":"5.13","text":"
  • New buffer script extpar_edgar_to_buffer for ICON
  • Global emission data for black carbon, organic carbon and sulfur dioxide
  • Input data:
    • EDGARv6.1_BC_2018_TOTALS.0.1x0.1.nc
    • EDGARv6.1_OC_2018_TOTALS.0.1x0.1.nc
    • EDGARv6.1_SO2_2018_TOTALS.0.1x0.1.nc
  • Fix albodo for glacier points
  • Changes the following fields for ICON setups
    • ALB
    • ALNID
    • ALUVD
    • FOR_D
    • FOR_E
    • LAI_MX
    • PLCOV_MX
    • ROOTDP
    • SOILTYP
    • ROOTDP
    • URBAN
"},{"location":"release_notes/#512","title":"5.12","text":"
  • New landuse data set Ecoclimap Second Generation
  • Namelist switch i_landuse_data=6 in INPUT_LU
  • Set l_terra_urb=.true. in INPUT_LU to process additional urban fields
  • Corresponding input-data set is ECOCLIMAP_SG.nc
  • Assign more landuse classes (previously \"undefined\") for Corine
  • Changes the following fields
    • SOILTYP
    • FR_LAND
    • PLCOV_MX
    • LAI_MX
    • RSMIN
    • URBAN
    • FOR_D
    • FOR_E
    • SKC
    • EMIS_RAD
    • ROOTDP
    • Z0
    • NDVI_MAX
    • FR_LAKE
    • DEPTH_LK
    • AHF
    • ISA
    • NDVI
    • ALNID
    • ALUVD
    • NDVI_MRAT
    • LU_CLASS_FRACTION
    • ALB
  • New buffer script extpar_hwsdART_to_buffer
  • Standalone executable, output not processed by consistency_check
  • Namelist INPUT_hwsdART defines key parameters
  • Input data: HWSD0_USDA.nc
  • Problems with git-lfs prohibit the data to be provided on Levante
"},{"location":"release_notes/#511","title":"5.11","text":"
  • Remove ecoclimap (ilanduse=4) from extpar_landuse_to_buffer
  • Introduction of GitHub actions
  • Format code each time a .py-file is pushed to repo
  • Test if docs (.tex-file) is still buildable each time it is changed
  • Attach docs (.pdf) as artifact to each git tag
  • Remove misleading code for extpar_topo_to_buffer
  • Orographic smoothing for Icon aborts Extpar
  • Remove dead code parts in mo_agg_topo_icon
  • Installation of Extpar as Python package
  • Possibility to install all relevant executables and Python scripts as package
  • Adapt import statements in all Python files to work as a package as well
  • Detailed instructions how to install in README
  • Wrapper script for Extpar
  • Only key switches like itope_type or ialb_type need to be specified
  • Automatic generation of namelists
  • Picks the correct topographic input data tiles into INPUT_ORO
  • Runs a batched job for Daint or Levante
  • Wrapper needs same Python environment (PYTHONPATH) as Extpar
  • run WrapExtpar.py -h for more infos
  • Testsuite
  • Add new test for WrapExtpar.py on Daint and Levante
  • Python
  • Use raise instead of sys.exit(1) to abort scripts
"},{"location":"release_notes/#5101","title":"5.10.1","text":"

This is a minor release to fix cdo version on Levante * CDO-version fixed to 2.0.5 because later versions exit with non-zero exit status for cdo -V

"},{"location":"release_notes/#510","title":"5.10","text":"

This is a minor release with fixes for Levante at DKRZ, a cleanup of MCH runscripts and a bugfix for in consistency_check * CDO version change from 1.9.10 to 2.0.5 on Levante at DKRZ - Fields from Python-CDO scripts changed up to 10e-4! - Many (even large) adjustements of the tolerances in the testsuite - Result on other machines remain unchanged * Fix for array out-of-bounds with special points outside of target domain * Abort Extpar in consistency check if compiler not GCC * Cleanup and update runscripts for models run at MeteoSwiss

"},{"location":"release_notes/#591","title":"5.9.1","text":"

This is a minor release to support Levante at DKRZ and drop the support for Intel * Support GCC on Levante * Remove configure-wrappers for Mistral * Remove Intel references in testsuite

"},{"location":"release_notes/#59","title":"5.9","text":"

This is an intermediate release with OpenMP optimizations, a bugfix for topography and and some cleanup * OpenMP optimizations for domains crossing date-line in the following parts - extpar_landuse_to_buffer - extpar_topo_to_buffer * Update runscripts - ETH domain with Merit topography - EU-Cordex domain with Globe topography * Cleanup - Remove all leftovers from old build-system - Remove output for vertices - Around 10% speedup

  • Bugfix: Take last row at dateline into account
  • Last raw data row in mo_agg_topo was ignored
  • Changes the following fields (only in testcase mpim/icon_r2b4)
    • SSO_GAMMA
    • SSO_OROMAX
    • SSO_OROMIN
    • SSO_SIGMA
    • SSO_STDH
    • SSO_THETA
    • T_CL
    • Z0
"},{"location":"release_notes/#58","title":"5.8","text":"

This is an intermediate release with changes for the upgrade of Piz Daint, support for Merit topography for COSMO and a revised algorithm for SGSL processing * Daint upgrade - export PMI_NO_PREINITIALIZE=1 to avoid unwanted prints from CDO - New paths for Python virtual environment: - Daint: /project/g110/extpar/venv_daint - Tsa: /project/g110/extpar/venv_tsa * Merit for COSMO - Enable itopo_type=3 for COSMO grid - Testing performed by Christian Steger from Hymet-group at ETH-IAC * Revised algorithm for SGSL preprocessing - Infer values of boundary points for SGSL - Deactivate SGSL for ASTER due to inconsistencies. For detailed information see the PR .

"},{"location":"release_notes/#574","title":"5.7.4","text":"

This is a minor release with an adaption in the SSO-computation and replacement of ksh with bash * Revised SSO for ICON - Experiments at DWD showed an improvement of model results with different SSO-thresholds, see this wiki entry for more information. - Lowering of threshold from 10.0 to 1.0 changes the following fields - SSO_GAMMA - SSO_OROMAX - SSO_OROMIN - SSO_SIGMA - SSO_STDH - SSO_THETA - topography_c (only in testcase mpim/icon_r2b4)

  • Replace ksh with bash in runscripts to prepare for future linux-distributions
"},{"location":"release_notes/#573","title":"5.7.3","text":"

This is a minor release with two technical improvements. * Python-CDO - Automatic detection if CDO contains thread-safe HDF5 library * extpar_topo_to_buffer - Reduce memory usage for option lsubstract_mean_slope=.TRUE.

"},{"location":"release_notes/#572","title":"5.7.2","text":"

This is a minor release with an update for the Python environment on Mistral and refactored docs. * Python on Mistral - Replace anaconda3/bleeding_edge with python3/unstable * Docs - Remove outdated documentation - Make docs about testsuite and compilation more comprehensive - Quickstart for all supported machines

"},{"location":"release_notes/#571","title":"5.7.1","text":"

This is a minor release with two bugfixes, one for the build-system and one for extpar_topo_to_buffer. * Build-system: - Install Python-CDO script in bin-folder directly in Makefile - Out-of-source build include Python-CDO scripts as well * extpar_topo_to_buffer: - Abort Extpar for itopo_type = 3

"},{"location":"release_notes/#57","title":"5.7","text":"

This is an intermediate release that introduces two Python-CDO scripts, modifications for reduced memory usage for non-global grids and a bugfix for the CAMS-aersosol dataset. * extpar_isa_to_buffer - Replace Fortran code with Python-CDO - Change in results for fields - Impervous Surface Area (ISA) - Read the users guide for detailed information about details of the implementation of extpar_isa_to_buffer * exptar_ahf_to_buffer - Replace Fortran code with Python-CDO - Change in results for fields - Antropogenic Heat Flux (AHF) - Read the users guide for detailed information about details of the implementation of extpar_ahf_to_buffer * Reduce memory usage for Python-CDO - Automatic determination of the extent of the target grid - Use CDO operator -sellonlat to read subset of input data * Bugfix for CAMS dataset - Remove assertion for GCC-compiler - Fix wrong dimensions in meta-data for the ICON-grid

"},{"location":"release_notes/#56","title":"5.6","text":"

This is an intermediate release that introduces a new topography dataset and the CAMS-aerosol climatologies, OpenMP support for CSCS-machines, enhanced testing on CSCS-machines, a script to extract the input-data from namelist, progress bars for logfiles of extpar_topo_to_buffer and consistent names for all logfiles.

  • Merit/Rema topography
  • Set switch itopo_type = 3 to process Merit-Rema data
  • CAMS aerosol climatology for ICON
  • Set switch iaot_type = 5 to process CAMS-aerosol data
  • Due to an unresolved bug only available for Intel compiler
  • Testsuite
  • Remove COSMO-D2 test from testsuite
  • Enable landuse tests for all supported machines
  • All tests run on 12 OpenMP threads on Piz Daint and Tsa for COSMO and ICON
  • Introduce the script extract_inputfiles_from_namelist.py for faster data access at CSCS. It is recommended to use this skript for your own Extpar runs as well.
  • Logging
  • Progress bar (0% to 100%) for topography processing
  • Change logfile-name for extpar_consistency_check to extpar_consistency_check.log
"},{"location":"release_notes/#551","title":"5.5.1","text":"

This is a minor release that fixes the inconsistent usage of netCDF versions across Extpar and small documentation changes.

  • Bugfix netCDF versions
  • Use netCDF version passed via NETCDF_OUTPUT_FILETYPE also for ICON grids (CDI-interface)
  • Documentation changes
  • Put Jonas Jucker as source code administrator
"},{"location":"release_notes/#55","title":"5.5","text":"

This is an intermediate release that brings enhanced namelist parsing for the Python-CDO scripts, a new Python-CDO script extpar_era_to_buffer.py to replace the former way of remapping ERA-climatologies using Icontools, a more sophisticated tolerance checker to allow specific roundoff for each test and variables, support NetCDF5 and new default NetCDF 4, fixes for high-resolution grid exceeding integer value range and some minor bugfixes for Piz Daint related to HDF5. * exptar_era_to_buffer - 4 fields processed - Sea surface temperature (T_SEA) - 2m land temperature (T_2M_CLIM) - Geometric height (TOPO_CLIM) - Snow water equivalent (W_SNOW) - New namelist-parameter iera_type defines type of ERA input data used, either ERA-I or ERA-5 - extpar_consistency_check checks for namelist INPUT_ERA to determine if ERA-climatologies come from Python-CDO or Icontools - Using extpar_era_to_buffer.py changes fields, a detailed review of changes was performed by J\u00fcrgen Helmert from DWD - W_SNOW - TOPO_CLIM - T_SEA - T_2M_CLIM - Read the users guide for detailed information about how extpar_era_to_buffer is integrated into the existing workflow * Enhanced namelist parsing for Python-CDO - Line starting with ! ignored as expected from Fortran code * Bugfixes for Piz Daint - -L option for all CDO commands - Disbable HDF5 file locking due to problems reading some input data * Improved tolerance testing in testsuite - Tolerances can now be defined separate for each test and variable for example in tolerance file * Support for NetCDF 5 - NetCDF 4 replaces netCDF 3 as default - Value of environment variable NETCDF_OUTPUT_FILETYPE sets version: NETCDF3, NETCDF4 or NETCDF5 * Modified netCDF-interface functions to allow write of fields with dimesions exceeding default integer value range

"},{"location":"release_notes/#541","title":"5.4.1","text":"

This is an intermediate release that brings two lradtopo-parameters for Icon, better user feedback for the shell-commands launched in the Python-scripts, a bugfix in exptar_albedo_to_buffer.py, a configure script for O3 (ETHZ) and small technical improvements to the Code. * HORIZON and SKYVIEW fields for the Icon grid - 4 new namelist-parameter - radius -> defines the considered horizontal distance for the HORIZON field - min_circ_cov -> defines the level of detail of the search-algorithm for performance reasons - max_missing -> defines upper treshold for the allowed missingness at the boundary of the domain - itype_scaling -> choose the type of scaling for SKYVIEW to account for anisotropic behaviour of IR-radiation - Read the users guide for detailed information about the difference between the COSMO and the ICON implementation

  • Refactor function launch_shell by using subprocess.PIPE, providing output even when command crashes
  • Correct bug for ialb_type=1 or 2 during netcdf write
  • Configure script for O3 at ETHZ, not regularly tested with Jenkins
  • Change link to CDI-submodule, to allow access for people witout DKRZ account
  • Split chained CDO-operators into two steps to prevent crashes on Piz Daint
"},{"location":"release_notes/#54","title":"5.4","text":"

This is a major release that introduces a rewrite of 4 Extpar programmes in Python, a common git-LFS input data repository, a new build-system, 2 additional landuse data sets, CDI-library for icon grids in consistency check, mmap-caching for consistency check for less memory usage, some small improvements in the Fortran code and some minor changes in the testsuite.

  • Rewrite of 4 Extpar programmes in Python
  • Modules extpar_alb_to_buffer.py, extpar_cru_to_buffer.py, extpar_emiss_to_buffer.py and extpar_ndvi_to_buffer.py
  • Small changes of the fields compared to the former Fortran implementation due to different interpolation methods, especially at the coastlines
  • Fields changed:
    • NDVI, NDVI_MAX, NDVI_MRAT
    • ALB_SAT, ALB_DRY
    • ALB, ALUVD, ALNID
    • T_CL
    • EMISS_RAD
  • A review involving users from DWD, MCH, MPIM and ETH took place to ensure the correctness of all fields changed
  • All Python programmes read from the same namelist file namelist.py containing Python dictionaries for each Extpar program.
  • Support of the old and coarse data (it_cl_type = 2) in extpar_cru_to_buffer expires and is replaced the following:

    • it_cl_type = 2 aggregates the coarse data over sea and the fine data over land
    • it_cl_type = 1 aggregates the fine data over land, sea points are not considered
    • For aggregation of the coarse data over land and sea only, use Extpar 5.3 or older
  • Read the users guide for detailed information about the rewritten programmes.

  • git-LFS input data repository

  • All input data that can be processed with Extpar is stored in a unified data repository extpar-input-data
  • Move all useful scripts and informations from raw_data_tools to the data repository hosted at DKRZ.
  • Remove folder raw_data_tools from Extpar repository
  • Some fields are renamed for better understanding, so please check your runscripts to adapt the new names.
  • Location on CSCS: /store/c2sm/extpar_raw_data/linked_data
  • Location on Mistral: /work/pd1167/extpar-input-data/linked_data
  • New build-system
  • New system follows the configure/make/make install paradigm
  • Out-of-source build supported
  • 4 basic steps to compile Extpar into binaries:

    • Run configure.your_machine.your_compiler
    • source modules.env
    • make or make -j 4 (for faster compilation)
    • Kesch at CSCS is no longer supported
  • Corine landuse data

  • Additional landuse data set covering Europe
  • Can only be used in combination with GLOBCOVER (i_landuse_data=1)
  • Set switch l_use_corine=.true. in namelist lu_raw_data to aggregate the new data set
  • The corine landuse data set is only tested on Mistral at DKRZ

  • ECCI landuse data

  • Global landuse data set split in 6 tiles
  • Set switch i_landuse_data=5, ntiles_globcover=6 and ilookup_table_lu = 1 in namelist lu_raw_data to aggregate the new data set
  • The ECCI landuse data is only tested on Mistral at DKRZ

  • Enhanced testsuite

  • Icon test for DWD for all compilers
  • Jenkins on Mistral, Tsa and Daint
  • Convert testsuite src-code from Python2 to Python3
  • Pep8-Coding style test for Python code
  • Allow round-off for certain fields in output
  • Copy all required files from namelistdir (icon grids, clim-fields and Python-files) through testsuite itself

  • CDI library for icon grids

  • CDI write routine replaces write_netcdf_icon_grid routine
  • Output of icon grids always involves CDI, output without CDI no longer supported
  • CDI contained as a git submodule inside the Extpar repository
  • See compile_run for instructions to clone Extpar from GitHub correctly

  • Mmap-caching

  • allows run of Extpar on machines with only little memory
  • new logical parameter l_use_array_cache = .true. * in namelist file *INPUT_CHECK activates mmap-caching
  • Bitwise-identical with and without mmap-caching
  • Only supported and tested for GCC compiler

  • Fortran Code changes

  • Remove all filename_max from INTENT(IN)
  • Output of COSMO/ICON netCDF-files in the buffer modules no longer supported
  • Remove all unused modules/programmes replaced by Python modules
  • Remaining code still needed in Fortan now contained in modules mo_python_data.f90, mo_python_routines.f90, and mo_python_tg_fields.f90
"},{"location":"release_notes/#53","title":"5.3","text":"

This is an intermediate release that reduces code complexity for topo_to_buffer.exe, enhances the testing for INTEL compiler and further cleans the code

  • Merge sgsl_to_buffer into topo_to_buffer
  • New namelist &oro_runcontrol in INPUT_ORO containing lcompute_sgsl
  • For users of former sgsl_to_buffer.exe, namelist &sgsl_io_extpar now moved to INPUT_ORO, containing the new parameter lpreproc_oro
  • The functionality is kept by default for all newly introduced namelist parameters, so for the same workflows as before only change lcompute_sgsl

  • Testsuite

  • Additional check for compiler warning of GCC,INTEL and NAG
  • Unify runscripts for COSMO and ICON
  • Slightly different domain for COSMO1, reducing the required number of ASTER tiles to only 1
  • Add references for INTEL in a seperate directory in data

  • Cleanup

  • Initialize logicals in extpar_consistency_check properly to prevent bugs
  • Remove hardcoded filename in emiss_to_buffer
  • Finalize logging and coding standard as described in developers guide
"},{"location":"release_notes/#521","title":"5.2.1","text":"

This is a minor release containing a bug fix and a small feature addition. * Bug fix for ICON/COSMO file- and variable name mismatch in topography calculation * Add Extpar version number (pulled from git release number) to output NetCDF file

"},{"location":"release_notes/#52","title":"5.2","text":"

This is an intermediate release introducing extpar_emiss_to_buffer, an improved logging, enhanced error checking during I/O and a lot of clean-up and formatting

  • New Extpar executable emiss_to_buffer
  • Aggregates CAMEL emissivity data to the target grid
  • Two raw datasets available (full range and only long-wave radiation)

  • Consistent logger for all Extpar executables

  • Three levels of messages: info, warning and error
  • Each Extpar executable write to its own logfile

  • Clean-up and formatting of all src-files

  • Remove all unused variables and USE-statements
  • Remove all unused dummy arguments in subroutines
  • Implement formatting according the coding-guidelines for Extpar

  • Make all precisions consistent

  • Remove i8 from Extpar, instead make all INTEGER(KIND=i4)
  • Change all REAL to REAL(KIND=wp), wp is defined in mo_kind

  • Small changes in some fields due to fix of implicit type conversion during runtime

  • Z0, max difference ~10^(-7)
  • DEPTH_LK, max difference ~10^(-6)

  • Enhanced error checking during I/O

  • All namelist I/O checked, abort of Extpar in case of incorrect (typos, wrong variables, etc,) namelists
"},{"location":"release_notes/#512_1","title":"5.1.2","text":"

This is a minor release containing a few bug fixes. * Fix build environment on Kesch * Add missing definition of skinc_lu meta data when ECOCLIMAP dataset is chosen.

"},{"location":"release_notes/#511_1","title":"5.1.1","text":"

This is a minor release containing a few bug fixes. * Fix read of l_use_glcc landuse calculation for COSMO runs. * Fix unitialized logical flag to trigger scale separation in topography calculation. * Reactivate all cosmo tests from testsuite on Kesch.

"},{"location":"release_notes/#51","title":"5.1","text":"

This is an intermediate release containing some bug fixes and some minor developments.

  • Changes to Jenkins and the automated testing:
  • Fix Mistral setup so that code runs on compute nodes instead of login nodes
  • Fix Mistral setup so that intel compiler can be tested. Note that only run success is checked for the intel compiler; the results are not yet tested.
  • Fix NAG compiler setup so that only compilation, not testing is done, because testing is too time consuming.

  • Bug fix for iaot_type = 4 (MACv2 aerosols). The code had not been correctly imported from version 4.0.

  • Contributions from DWD including:

  • DWD versions of the python and shell replacement scripts for ndvi, albedo, and cru
  • DWD bug fix for the albedo calculation
  • DWD bug fix for incorrect glacier points

  • New output variable skin conductivity (SKC) developed by Jan-Peter Schulz. Skin conductivity is calculated from the landuse data.

"},{"location":"release_notes/#504","title":"5.0.4","text":"

This is a minor release containing a few bug fixes.

  • Bug fix for problems when soil_type=3 is used. The code had not been correctly imported from version 4.0

  • Bug fix adding missing NetCDF get_varid call when more than one GLOBCOVER tile is used.

"},{"location":"release_notes/#503","title":"5.0.3","text":"

This is a minor release containing a bug fix.

  • Bug fix for incorrect global attributes in output NetCDF file.
"},{"location":"release_notes/#502","title":"5.0.2","text":"

This is a minor release containing a bug fix.

  • Bug fix for incorrect subroutine argument usage in mo_agg_isa.f90.
"},{"location":"release_notes/#501","title":"5.0.1","text":"

This is a minor release fixing a few bugs and some documentation.

  • Bug fix to remove too many characters in write statement (mo_logging.f90)
  • Bug fix for unitialized variable ntiles_globcover (mo_landuse_routines.f90, extpar_consistency_check.f90, and extpar_landuse_to_buffer.f90)
  • Remove unnecessary libraries in Options.daint
  • Fix typos in README.compile_run
"},{"location":"release_notes/#50","title":"5.0","text":"

This release represents a merge of the Extpar official version 4.0 code with the DWD-Extpar version 2.10.

"},{"location":"release_notes/#build-mechanism","title":"Build Mechanism","text":"
  • Added Options file for compiling on LCE with Intel compiler
  • Added Options files for compiling on Mistral with GCC, NAG, and Intel compilers
  • Added Options files for compiling on Mac OS with the GCC compiler
  • Updated Options file for compiling on o3 at ETH with PGI compiler
  • Update bin/gen_info.sh for compatibility with git
"},{"location":"release_notes/#run-scripts","title":"Run scripts","text":"
  • Minor adaptations to run scripts to be compatible with new version
  • Addition of MPI ICON run script
"},{"location":"release_notes/#testing","title":"Testing","text":"
  • Addition of cosmo-dwd and icon tests to testsuite.
  • Update of Jenkins build and test scripts.
  • Add testsuite run scripts for mpi and dwd on mistral.
  • Update of testsuite references.
"},{"location":"release_notes/#code-changes","title":"Code changes","text":""},{"location":"release_notes/#albedo-calculation","title":"Albedo calculation:","text":"
  • Added bin/cdo2alb-buffer.py and extpar_alb_to_buffer.sh to replace slow and incorrect albedo calculation for high resolution ICON model grids
"},{"location":"release_notes/#topography-calculation","title":"Topography calculation:","text":"
  • Added namelist parameter: lsubtract mean_slope
  • Move mo_agg_topo to mo_agg_topo_icon and mo_agg_topo_cosmo
  • Bug fix in mo_topo_sso- changes results of sso_sigma slightly
"},{"location":"release_notes/#soil-calculation","title":"Soil calculation:","text":"
  • Additional HWSD calculation for deep soil
"},{"location":"release_notes/#ndvi-calculation","title":"NDVI calculation:","text":"
  • Added bin/cdo2ndvi-buffer.py and extpar_ndvi_to_buffer.sh to replace slow and incorrect NDVI calculation for high resolution ICON model grids
"},{"location":"release_notes/#climatological-2m-temperature-calculation","title":"Climatological 2M temperature calculation:","text":"
  • Added bin/cdo2t_cl-buffer.py and extpar_cru_to_buffer.sh to replace slow and incorrect TCLIM calculation for high resolution ICON model grids
  • Added namelist parameter: ltcl_merge
"},{"location":"release_notes/#flake-calculation","title":"Flake calculation:","text":"
  • Added namelist parameter: lflake_correction.
"},{"location":"release_notes/#consistency-check","title":"Consistency check:","text":"
  • [Changes results] Included lower limit for roughness length
  • ERA-I SST and T2M temperature for ICON model
"},{"location":"release_notes/#grib-output-not-supported","title":"Grib output NOT supported","text":""},{"location":"release_notes/#gme-model-not-supported","title":"GME model NOT supported","text":""},{"location":"release_notes/#changes-in-results","title":"Changes in Results","text":"

Due to the large amount of changes in the code in this release, there are many differences in the resulting external parameter fields generated by the release 5.0 code compared to the fields generated by older Extpar codes. The only code change in this release that deliberately changed the results was the addition of a lower limit for roughness length, which is 1e-6. Otherwise, any changes in results that can be seen came directly from bug fixes to the code, and as such most of them are small and are not expected to change results in the COSMO or ICON model runs. Some of these changes in results are examined in the next two sections.

"},{"location":"release_notes/#extpar-version-40-to-extpar-version-50","title":"Extpar version 4.0 to Extpar version 5.0","text":"

The technical testsuite in Extpar was used to compare the external parameter fields from Version 4.0 and Version 5.0 for three different MeteoSwiss operational setups for COSMO and a climate setup for COSMO-CLM.

"},{"location":"release_notes/#cosmo-7-globe-topography-input","title":"COSMO 7, globe topography input","text":"

For the COSMO7 MCH setup using the globe topography data set, changes in the results smaller than 1e-6 can be seen for several variables, including the aerosol variables, albedo variables, HORIZON, and SSO_SIGMA. Larger changes on the order of 3 degrees can be seen in the SSO_THETA variable; these are due to a bug fix in this release, and are expected. Finally, roughness length is different as well due to the introduction of the lower limit value of 1e-6.

"},{"location":"release_notes/#cosmo-7-aster-topography-input","title":"COSMO 7, aster topography input","text":"

For the COSMO7 MCH setup using the aster topography data set, the changes in the results are less than 5e-7, and occur in the aerosol, HORIZON, and SSO_SIGMA variables.

"},{"location":"release_notes/#cosmo-1-aster-topography-input","title":"COSMO 1, aster topography input","text":"

For the COSMO1 MCH setup using the aster topography data set, the changes in the results are less than 4e-5, and occur in the aerosol, HORIZON, SKYVIEW, and T_CL variables.

"},{"location":"release_notes/#cosmo-cm-climate-setup","title":"COSMO-CM climate setup","text":"

For the COSMO-CLM climate setup using the globe topography data set, changes in results smaller than 3e-8 can be seen in the SSO_SIGMA and SSO_STDH variables. Larger changes on the order of 3 degrees can be seen in the SSO_THETA variable; these are due to a bug fix in this release, and are expected. Due to another bug fix, the ALB_SAT and ALB_DRY variables have changed results on the order of .2. Finally, roughness length is different as well due to the introduction of the lower limit value of 1e-6.

"},{"location":"release_notes/#dwd-extpar-version-210-to-extpar-version-50","title":"DWD Extpar version 2.10 to Extpar version 5.0","text":"

Comparisons of the COSMO D2 setup used operationally by DWD were carried out to compare the current operational Extpar code (DWD version 2.10) with the new release 5.0. This comparison showed no significant differences in the generated external parameter fields. Get more details of this comparison here

"},{"location":"testing/","title":"Testing","text":"

EXTPAR is tested with an adapted version of the COSMO technical testsuite .

"},{"location":"testing/#run-tests","title":"Run Tests","text":"

First step is to compile the code following the instructions in Compile and Run.

"},{"location":"testing/#docker","title":"Docker","text":"
docker run extpar bash -c \"/workspace/test/jenkins/test_docker.sh\"\n
"},{"location":"testing/#levante","title":"Levante","text":"
cp bin/* test/testsuite/bin/.\ncd test/testsuite\n./data/get_data.sh\nsbatch submit.levante.sh\n

The results of the testsuite can be found in file testsuite.out

An example output could look as follows:

"},{"location":"testing/#testlists","title":"Testlists","text":"

There are many different testlist, each containing a set of tests for different setups, compiler or models:

"},{"location":"testing/#gcc","title":"GCC","text":"
  • COSMO
  • ICON
  • Landuse
"},{"location":"testing/#tolerances","title":"Tolerances","text":"

It is possible to define an optional tolerance threshold for each test and each field. To allow deviations for the test icon_d2 for example, just dit the the tolerances file .

The syntax is as follows:

PARAMETER, abs_diff\nNDVI, 9.0e-08\nW_SNOW, 5.0e-05\n
"},{"location":"testing/#add-a-new-test","title":"Add a New Test","text":"
  1. Modify the testlist.xml file to add the new test. Alternatively, you could also add a new testlist XML file (with a new name). The testlist which is run can be chosen from the testsuite command line.

  2. Make a folder in the data folder for the new test containing the INPUT_* files and the namelist.py for the Python-CDO modules.

  3. Send any binary reference files to upload to the ftp site to the source code administrator.

"},{"location":"user_manual/","title":"User and Implementation Guide","text":"

Hermann Asensio / Martina Messmer / Daniel L\u00fcthi / Katie Osterried / Jonas Jucker / Jacopo Canton / Philipp Sommer / J\u00fcrgen Helmert / Michael J\u00e4hn

This documentation provides an overall description of the EXTPAR software, provides detailed information on specific modules, current limitations and the namelist input.

For the sake of completeness, the latest EXTPAR documentation (v5.14) that was created from the original LaTeX file, can be downloaded here.

"},{"location":"user_manual/SUMMARY/","title":"SUMMARY","text":"
  • Home
  • Overall Description
  • Software Modules
  • Fortran Modules
  • Python Modules
  • Current Limitations
  • Namelist Input
"},{"location":"user_manual/user_manual_01_overall_description/","title":"Overall Description","text":"

Numerical Weather Prediction (NWP) models and Climate models require geographical localized datasets like the topographic height of the earth surface, the plant cover, the distribution of land and sea and, dependent on the schemes used, a variety of other external parameters.

The EXTPAR software system (EXTPAR - External Parameter for Numerical Weather Prediction and Climate Application) is able to generate external parameters for the different models COSMO and ICON. The software can run on a UNIX or Linux system where the raw data is stored. It allows operators (experienced users) running the scripts to create new external parameters controlled by user specifications like the model domain.

The following steps are performed for the generation of external parameters:

  1. The target grid has to be specified. The supported target grids are

    • Rotated and non-rotated longitude-latitude grid (COSMO)
    • Icosahedral Triangular grids (ICON) with optionally higher resolution in selected regions ('local zooming')
  2. The different raw data sets are aggregated to the target grid considering all raw data elements which are within the target grid element. If the target grid has a higher resolution than the input grid on which the raw data is available either an interpolation is performed or the target grid is filled with the nearest neighbor, but sub-grid scale statistical calculations (e.g. subgrid scale variance of orograhic height) are dismissed.

  3. All the different external parameter sets have to be checked for consistency against each other. In case of conflicts default values are set automatically. In the NetCDF output, information on the input data and the processing software is given.

"},{"location":"user_manual/user_manual_01_overall_description/#main_input","title":"Input Raw Datasets","text":"

The information for the external parameters is aggregated from various raw datasets for land use data, orography or soil data, see table below for a detailed list of the raw datasets.

The input data for EXTPAR is stored in a git-LFS repository at https://gitlab.dkrz.de/extpar-data/extpar-input-data . Instructions for downloading the whole repository or updating with new datasets can be found in the git-LFS repository. For access to the input data repository, contact the current EXTPAR source code administrator.

Dataset Source Resolution GLOBE orography NOAA/NGDC 30'' ASTER orography (limited domain: 60\u00b0N - 60\u00b0S) METI/NASA 1'' MERIT/REMA orography Composite DEM 3'' (90m) Globcover 2009 ESA 10'' GLC2000 land use JRC Ispra 30'' GLCC land use USGS 30'' Ecoclimap-SG land use CNRS and Meteo France 300m ESA CCI-LC ESA 10'' DSMW Digital Soil Map of the World FAO 5' HWSD Harmonized World Soil Database FAO/IIASA/ISRIC/ISSCAS/JRC 30'' HWSD Harmonized World Soil Database USDA KIT 30'' NDVI Climatology, SEAWiFS NASA/GSFC 2.5' CRU near surface climatology CRU University of East Anglia 0.5 degree Aerosol Optical thickness NASA/GISS 4x5 degree (Global Aerosol Climatology Project) AeroCom Global AOD data AeroCom Project 1 degree MACC-II climatological AOD (2003-2012) ECMWF 1.125 degree MACv2 monthly AOD, SSA and ASY data MPI, RHM 1 degree CAMS monthly 3D-climatology 11 types of aerosols ECMWF, RHM 3 degree Global lake database (GLDB) DWD/RSHU/MeteoFrance 30'' MODIS albedo NASA 5' MODIS derived soil albedo values Community Land Model 3.5 30' CAMEL Emissivity NASA 5km EDGAR Emissions European Commission /JRC/PBL 0.1 degree MODIS cloud droplet number climatology Q06 NASA 1 degree

Table 1: Input raw datasets

"},{"location":"user_manual/user_manual_01_overall_description/#main_output","title":"Output External Parameters","text":"

The output fields with the external parameters are shown here:

External parameter Short name Unit Raw dataset geometrical height HSURF \\(m\\) GLOBE/ASTER/MERIT/REMA geopotential of earth surface FIS \\(m^{2} s^{-1}\\) GLOBE/ASTER/MERIT/REMA standard deviation of subgrid scale orographic height SSO_STDH \\(m\\) GLOBE/ASTER/MERIT/REMA anisotropy of topography SSO_GAMMA 1 GLOBE/ASTER/MERIT/REMA angle between principal axis of orography and global E SSO_THETA 1 GLOBE/ASTER/MERIT/REMA mean slope of subgrid scale orography SSO_SIGMA 1 GLOBE/ASTER/MERIT/REMA surface roughness Z0 \\(m\\) GLC2000, GLOBE/ASTER/MERIT/REMA Slope aspect SLOPE_ASP deg GLOBE/ASTER/MERIT/REMA Slope angle SLOPE_ANG deg GLOBE/ASTER/MERIT/REMA Horizon angles (resolution from 15deg) HORIZON deg GLOBE/ASTER/MERIT/REMA Skyview factor SKYVIEW - GLOBE/ASTER/MERIT/REMA soil texture SOILTYP - DSMW/HWSD fraction of sand FR_SAND % HWSD fraction of silt FR_SILT % HWSD fraction of clay FR_CLAY % HWSD fraction of organic carbon FR_OC % HWSD bulk density BULK_DENS \\(g cm^{-3}\\) HWSD deep soil texture SUBSOILTYP - HWSD deep soil fraction of sand SUB_FR_SAND % HWSD deep soil fraction of silt SUB_FR_SILT % HWSD deep soil fraction of clay SUB_FR_CLAY % HWSD deep soil fraction of organic carbon SUB_FR_OC % HWSD deep soil bulk density SUB_BULK_DENS \\(g cm^{-3}\\) HWSD Fraction of Heavy Clay fr_hcla 1 HWSD_USDA Fraction of Silty Clay fr_silc 1 HWSD_USDA Fraction of Light Clay fr_lcla 1 HWSD_USDA Fraction of Silty Clay Loam fr_sicl 1 HWSD_USDA Fraction of Clay Loam fr_cloa 1 HWSD_USDA Fraction of Silt fr_silt 1 HWSD_USDA Fraction of Silty Loam fr_silo 1 HWSD_USDA Fraction of Sandy Clay fr_scla 1 HWSD_USDA Fraction of Loam fr_loam 1 HWSD_USDA Fraction of Sandy Clay Loam fr_sclo 1 HWSD_USDA Fraction of Sandy Loam fr_sloa 1 HWSD_USDA Fraction of Loamy Sand fr_lsan 1 HWSD_USDA Fraction of Sand fr_sand 1 HWSD_USDA Fraction of Undefined or Water fr_udef 1 HWSD_USDA ground fraction covered by plants max (vegetation period) PLCOV_MX 1 GLC2000/Globcover/ ESA CCI-LC ground fraction covered by plants min (vegetation period) PLCOV_MN 1 GLC2000/Globcover/ ESA CCI-LC ground fraction covered by artificial (urban) areas URBAN 1 GLC2000/Globcover/ ESA CCI-LC ground fraction covered by artificial (urban) areas URBAN 1 GLC2000/Globcover/ESA CCI-LC/ LCZs with TERRA_URB ground fraction covered by deciduous forest FOR_D 1 GLC2000/Globcover/ ESA CCI-LC skin conductivity SKC \\(W m^{-1} K^{-1}\\) Globcover/ESA CCI-LC root depth ROOTDP \\(m\\) GLC2000/Globcover/ ESA CCI-LC leaf area index max(vegetation period) LAI_MX 1 GLC2000/Globcover/ESA CCI-LC leaf area index min (vegetation period) LAI_MN 1 GLC2000/Globcover/ ESA CCI-LC plant resistance PRS_MIN \\(s m^{-1}\\) GLC2000/Globcover/ ESA CCI-LC long wave surface emissivity EMISS_RAD 1 GLC2000/Globcover/ ESA CCI-LC (monthly) normalized differential vegetation index NDVI 1 SEAWIFS Annual maximum of normalized differential vegetation index NDVI_MAX 1 SEAWIFS (monthly) proportion of actual value/ maximum normalized differential vegetation index NDVI_RATIO 1 SEAWIFS (monthly) optical thickness from black carbon aerosol AER_BC 1 GACP (monthly) optical thickness from dust aerosol AER_DUST 1 GACP (monthly) optical thickness from organic aerosol AER_ORG 1 GACP (monthly) optical thickness from SO4 aerosol AER_SO4 1 GACP (monthly) optical thickness from sea salt aerosol AER_SS 1 GACP (monthly) aerosol optical thickness for RG92 spectral bands AOT12 1 MACv2 (monthly) single scattering albedo for RG92 spectral bands SSA12 1 MACv2 (monthly) asymmetry factor for RG92 spectral bands ASY12 1 MACv2 (monthly) layer-integrated mass of Sea Salt with dry radius in the range 0.03-0.5 microns Sea_Salt_bin1 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Sea Salt with dry radius in the range 0.5-5.0 microns Sea_Salt_bin2 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Sea Salt with dry radius in the range 5.0-20.0 microns Sea_Salt_bin3 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Mineral Dust with dry radius in the range 0.03-0.55 microns Mineral_Dust_bin1 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Mineral Dust with dry radius in the range 0.55-0.9 microns Mineral_Dust_bin2 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Mineral Dust with dry radius in the range 0.9-20.0 microns Mineral_Dust_bin3 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of hydrophilic Organic Matter Organic_Matter_hydrophilic \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of hydrophobic Organic Matter Organic_Matter_hydrophobic \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of hydrophilic Black Carbon Black_Carbon_hydrophilic \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of hydrophobic Black Carbon Black_Carbon_hydrophobic \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Sulfates Sulfates \\(kg m^{-2}\\) CAMS (monthly) Pressure at base of layer half_level_pressure Pa CAMS Near surface temperature (climatological mean) T_2M_CL \\(K\\) CRU Lake Depth DEPTH_LK \\(m\\) GLDB Lake Fraction FR_LAKE 1 GLDB (monthly) albedo ALB_DIF12 % MODIS (monthly) Near Infrared Albedo ALNID % MODIS (monthly) Ultra Violet Albedo ALUVD % MODIS soil albedo for dry soils ALB_DRY % Community Land Model 3.5 soil albedo for saturated soils ALB_SAT % Community Land Model 3.5 fraction of impervious surface area ISA 1 NOAA, EEA or LCZs with TERRA_URB anthropogenic heat flux AHF \\(W m^{-2}\\) NOAA or LCZs with TERRA_URB subgrid-scale slope parameter S_ORO 1 GLOBE, ASTER, MERIT/REMA EMISS yearly maximum for climatology 1998-2003 EMISS_MAX 1 CAMEL monthly mean EMISS climatology 1998-2003 EMISS 1 CAMEL (monthly) proportion of actual value/maximum normalized differential vegetation index EMISS_MRAT 1 CAMEL Urban paved fraction FR_PAVED 1 LCZs with TERRA_URB Urban building fraction URB_BLDFR 1 LCZs with TERRA_URB Urban building height URB_BLDH \\(m\\) LCZs with TERRA_URB Urban canyon height-to-width ratio URB_H2W 1 LCZs with TERRA_URB Urban shortwave albedo URB_SALB 1 LCZs with TERRA_URB Urban thermal albedo URB_TALB 1 LCZs with TERRA_URB Urban emissivity URB_EMIS 1 LCZs with TERRA_URB Urban heat conductivity URB_HCON 1 LCZs with TERRA_URB Urban heat capacity URB_HCAP \\(J/K\\) LCZs with TERRA_URB Annual black carbon emissions emi_bc \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Annual organic carbon emissions emi_oc \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Annual sulfur dioxide carbon emissions emi_so2 \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Annual ammonia emissions emi_nh3 \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Annual nitrogen oxides emissions emi_nox \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Monthly cloud droplet number climatology cdnc \\(cm^{-3}\\) MODIS

Table 2: Output external parameters

"},{"location":"user_manual/user_manual_02_software_modules/","title":"Software Modules","text":""},{"location":"user_manual/user_manual_02_software_modules/#Overview","title":"Overview","text":"

The software EXTPAR is composed of thirteen autonomous programmes. Twelve programmes are responsible for aggregating a raw data to the target grid, which is specified by the user. The thirteenth program, the consistency check, is performed in the end. The executables are called extpar_*_to_buffer, whereas the star * stands for ahf (anthropogenic heat flux), aot (aerosol optical thickness), cru (temperature climatology of the Climate Research Unit (CRU)), landuse, topo, ndvi (normalized difference vegetation index), soil, flake (fraction lake), isa (impervious surface area), albedo, emiss (emissivity) and era (ERA climatologies) respectively. In Fig. 1 a schematic representation of EXTPAR is drawn. For the sake of clarity only the topography and land-use path is shown. The same can be applied for the other ten raw data sets. For all these programs there exist namelists. Most of the namelists only contain the name and path of the raw data file and the name of the buffer file, which is later used for the consistency check, and the name of the output of the final external variables.

The software modules read from the following namelist files:

  • INPUT_AOT
  • INPUT_LU
  • INPUT_ORO, INPUT_OROSMOOTH, INPUT_RADTOPO, INPUT_SCALE_SEP
  • INPUT_SOIL
  • INPUT_hwsdART
  • INPUT_FLAKE
  • INPUT_grid_org
  • INPUT_COSMO_GRID or INPUT_ICON_GRID
  • namelist.py

The namelists INPUT_grid_org and either INPUT_COSMO_GRID or INPUT_ICON_GRID are used in all the programs, as they contain the general information of the target grid to which the raw data should be aggregated. The namelist file namelist.py is read by all Python programmes.

Figure 1: Schematic illustration of the software EXTPAR.

"},{"location":"user_manual/user_manual_02_software_modules/#Python-CDO","title":"Hybrid Python-CDO Structure","text":"

For three of the external parameters calculated by EXTPAR, namely albedo, NDVI, and the Hadley CRU climatologies, problems appeared with target resolutions much higher than the provided input data set resolutions. The problem is that not all target grid points get assigned a proper value when using the legacy Fortan code and interpolation method.

The algorithm used in the legacy Fortran modules aggregates source grid point values onto the target grid where the input data is finer than the target grid and uses bi-linear interpolation to fill the remaining grid points where the input data is sparser than the target grid. However, starting from a 5 km global resolution for the target grid, points can potentially get assigned unreasonable values because of the insufficiency of the bi-linear interpolation algorithm.

To resolve this issue, for EXTPAR Version 5.4 a rewrite of those Fortran modules in Python, using the more sophisticated interpolation methods from CDO with support for all grids was conducted. Because the interpolation methods implemented in CDO are faster than those in Fortran for large model grids, emiss_to_buffer is written in Python as well. A rewrite in Python only makes sense for Fortran modules that do simple calculations with the data. These calculations can easily be substituted with CDO-commands in the Python modules. For modules doing complex calculations and providing many namelist parameters the user can define, like extpar_topo_to_buffer or extpar_landuse_to_buffer, a rewrite in Python is not planned.

The interpolation algorithms selected are:

  • albedo distance-weighted average remapping
  • NDVI first order conservative remapping
  • EDGAR first order conservative remapping
  • CDNC first order conservative remapping
  • CRU climatology distance-weighted average remapping
  • emissivity first order conservative remapping
  • ERA climatology first order conservative remapping
  • AHF/ISA bilinear interpolation

The description of the used algorithms can be found via the CDO documentation.

"},{"location":"user_manual/user_manual_02_software_modules/#Summary","title":"Summary","text":"

The external parameters can be generated by using thirteen programs to aggregate the various raw datasets to the target grid and after this by calling the final program for the important consistency check.

  1. In a first step, the target grid and other parameters have to be specified by the user in the runscript (see section Grid Definition for the details).

  2. Then the aggregation of the raw datasets listed in Table 1 to the given target grid can be performed by calling following executables

    • extpar_aot_to_buffer
    • extpar_cru_to_buffer
    • extpar_landuse_to_buffer
    • extpar_topo_to_buffer
    • extpar_ndvi_to_buffer
    • extpar_soil_to_buffer
    • extpar_flake_to_buffer
    • extpar_alb_to_buffer
    • extpar_isa_to_buffer
    • extpar_ahf_to_buffer
    • extpar_emiss_to_buffer
    • extpar_hwsdART_to_buffer
    • extpar_era_to_buffer
    • extpar_edgar_to_buffer

    These programs generate intermediate NetCDF files (\"buffer\") with the aggregated data.

  3. The executable extpar_consistency_check reads in the buffer-files, performs an automated consistency check, and finally generates the output fields listed in Table 2.

The task of the consistency check that is performed at the end is to find inconsistencies in the soil data, the lake data and the NDVI data. In the soil data problems may appear between the soil type and the land-use, in particular for water and ice grid elements. For the fraction lake, minimal and maximal lake depth must be introduced and some seas such as the Caspian and the Dead Sea as well as Lake Constance must be defined manually. For more information see chapter 3.7.

"},{"location":"user_manual/user_manual_03_fortran_modules/","title":"Fortran Modules","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_topo_to_buffer","title":"extpar_topo_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description","title":"Short description","text":"

The program extpar_topo_to_buffer aggregates the orography of the GLOBE, ASTER, or MERIT/REMA dataset to the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition","title":"Target grid definition","text":"

The first part of this program contains several routines that read the namelists defined in the run script (see chapter 6 for more information on the run scripts). The first routine (init_target_grid) collects all the information needed to define the target grid with an integrated routine that gathers the variables given in the namelist INPUT_grid_org. The variable igrid_type, which can either be 1 ('ICON') or 2 ('COSMO'), is an integer switch to define the target grid.

Then a routine reads the namelist of the corresponding grid, which is either INPUT_ICON_GRID or INPUT_COSMO_GRID, depending on the chosen grid type. The run script contains only one of the two namelists. This must be manually changed by the user. These namelists contain among other variables the resolution of the grid, the user specified domain and the location of the center of the grid (for closer information about the namelists compare chapters 6.2.2 - 6.2.3). This allows an exact definition of the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#subgrid-scale-slope","title":"Subgrid-scale slope","text":"

The namelist INPUT_ORO contains the parameter lcompute_sgsl, to determine whether SGSL should be calculated from the respective raw topography data. Formerly this was done in a separate executable extpar_sgsl_to_buffer.exe. From Release 5.3 onwards, the SGSL calculation was incorporated into the execututable 'extpar_topo_to_buffer`. As an intermediate step, the SGSL is written out to NetCDF, one separate file for each raw topography tile is required. In case the preprocessed SGSL NetCDF are already available, setting the parameter lpreproc oro= .false., deactivates the preprocessing, but not the aggregation of SGSL to the target grid. We recommend to only do the preprocessing for the GLOBE dataset, because the computational cost for the ASTER or MERIT/REMA dataset is very high and no validation has taken place for this dataset.

"},{"location":"user_manual/user_manual_03_fortran_modules/#topographic-correction-for-radiation","title":"Topographic correction for radiation","text":"

In a second step, the namelist INPUT_RADTOPO is read. It contains the information if the user desires the calculation of the topographical corrected radiation parameters or not. If the switch is set to .TRUE. a border is added to the COSMO domain, as the computations need grid points beyond the edges of the normal domain. For ICON an on the fly extension of the grid is not possible, leading to missing data at the boundaries. Therefore the namelist-switch max_missing defines the treshold for the allowed fraction of missingness. Altough the topographical corrected radiation can be calculated for both ICON and COSMO grids, the two sets of fields cannot be considered as identical, because for ICON grids one assumes plain (non-tilted) grid-cells, whereas for COSMO one also takes into account self-shading and effects related to tilted-plains for the skyview-factor.

The number of horizons is specified in the namelist. For the COSMO-7 and COSMO-2 setup 24 horizons are recommended. The icon-only parameter radius defines the radial distance taken into account for the topographical corrected radiation parameters. To account for the anisotropic behaviour of longwave-radiation, the namelist parameter itype_scaling defines the power of the term SIN(horizon-angle) in the equation of the skyview-factor. Due to performance reasons, for ICON the parameter min_circ_cov determines how many grid-cells can be skipped on the circumference considered for the computations.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-topography-data","title":"Raw topography data","text":"

The namelist INPUT_ORO gives the possibility to switch between two raw orographical data sets (GLOBE, ASTER, or MERIT/REMA). In contrast to the 90m-data of MERIT/REMA, it must be considered, that the 30m-data of ASTER are not completely downloaded and are therefore not globally available. The downloaded region extends from 60N to 60S and from 180W to 180E. It is not recommended to derive the topographical parameters from ASTER if the region is beyond 60 degrees north or south. The ASTER files are arranged as displayed in Figure 2. As the computational time of the program extpar_topo_to_buffer depends mainly on the number of ASTER files that are read in, two new parameters are introduced in the namelist. These two parameters give the number of columns and rows of the used ASTER files. The filenames of the desired ASTER files must be given manually. Figure 2 gives an example on how to use these parameters in the case of COSMO-2. A similar approach is used for MERIT/REMA DEM as shown in Figure 3. The latitude range between 60-90 deg S is covered by REMA DEM, which was mapped to the MERIT data format by BKG, Germany. If GLOBE is used the columns and rows are set to 4 and all GLOBE files must be listed in the topo_files parameter. A check in the program extpar_topo_to_buffer is introduced, which gives a warning if the borders of the domain are exceeded. This is followed by an abortion of this program. As there is no need to calculate the subgrid scale parameters (SSO) for high resolution setups, there is the logical switch lsso_parm to turn off the calculation of the SSOs.

Figure 2: Illustration of the single domains of the 240 ASTER tiles. An example of how the three parameters ntiles_columns, ntiles_row and topo_files in the namelist could look like is given in red.

Figure 3: Illustration of the single domains of the 60 MERIT and the 12 REMA tiles below 60 deg S latitude.

Furthermore the variables of the namelist INPUT_ORO, which cover all the raw topographical data information, are fed into the program. In this namelist the path of the raw data is given as well as the names of the topography data files. An integer switch allows the choice between the highly resolved, non-global topography ASTER, the global but coarser MERIT/REMA and the coarser and global data set GLOBE (1: GLOBE, 2: ASTER, 3: MERIT/REMA). Furthermore the logical switch to decide whether the SSO parameters are desired or not is read. In order to define the right number of raw data tiles the variables ntiles_column and ntiles_row must be available in the namelist. Additionally, the names for the buffer and output files are defined.

The topography data files must be manually changed in the run script, when switching from GLOBE to ASTER, or MERIT/REMA and vice versa.

Then, the number of tiles of the raw topography data is defined (this varies between the raw data sets: 16 tiles for GLOBE, 1 - 240 tiles for ASTER, 72 tiles for MERIT/REMA). This value is the product of the number of tiles in each column and each row. The variables concerning the raw topography are allocated and in a further step filled with the according values. These values are the edges of each raw topography tile, the number of gridpoints in x- and y-direction, as well as the resolution in both directions. These are directly deduced from the raw data NetCDF files. Finally the borders of the ASTER domain are defined, when ASTER is used.

After the definition of the target grid and the topography set, a check examines the compatibility of the user specified input with the target grid; as ASTER is not globally available at the moment it is checked that the user specified domain is contained in the current ASTER domain. And, if this is not the case, the extpar_topo_to_buffer is aborted with an error message.

"},{"location":"user_manual/user_manual_03_fortran_modules/#scale-separation-input","title":"Scale separation input","text":"

The namelist INPUT_SCALE_SEP gives all the information needed to calculate the SSO parameters and roughness length based on a 3 km filtered topography. Thus the logical switch lscale_separation must be read to decide if a scale separation is desired or not. Furthermore the raw data files and path must be provided. Note that the lscale_separation can only be set to .TRUE. if GLOBE is used as topography, as there is no ASTER or MERIT/REMA based 3 km filtered topography available yet. Additionally the user must decide if the computation of the SSO parameters make sense or not. Table 3 can give some assistance to come to the right decision.

Resolution Calculation of standard deviation lscale_separation Model resolution is smaller than raw data resolution SSOs: \\(\\sigma = 0\\),z0: \\(\\hspace{12pt}\\sigma = 0\\) .FALSE. Model resolution is greater than the raw data resolution but smaller than 3 km SSOs: \\(\\sigma = 0\\),z0: \\(\\hspace{12pt}\\sigma = \\sum {(model - raw\\hspace{2pt} data)}^{2}\\) .FALSE. and lsso_param = .FALSE. Model resolution is greater than 3 km SSOs: \\(\\sigma = \\sum {(model - 3km\\hspace{2pt} filt )}^{2}\\),z0: \\(\\hspace{12pt}\\sigma = \\sum {(3km\\hspace{2pt} filt - raw\\hspace{2pt} data)}^{2}\\) .TRUE.

Table 3: Recommendations on the usage of the scale separation. Be aware that the actual model topography resolution is approximately twice as large as the model resolution. E.g. COSMO-2: The resolution of the topography is approximately 4 km.

"},{"location":"user_manual/user_manual_03_fortran_modules/#orographical-smoothing-input","title":"Orographical smoothing input","text":"

The last namelist that must be read before allocating the orography is the namelist INPUT_OROSMOOTH, which defines all the variables needed to perform an orographical smoothing. The lfilter_oro logical switch, controls the computation of the smoothing in EXTPAR.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-raw-topography-to-the-target-grid","title":"Aggregation of the raw topography to the target grid","text":"

The subroutine det_topo_tiles_grid defines the grid of each raw topography data tile. For this, the start and end latitude and longitude of each tile, the distance between two grid points in the latitudinal and longitudinal direction (dlat, dlon) as well as the number of grid points in both directions (nlat, nlon) are derived for each tile. Additionally, the grid for the whole GLOBE, ASTER, or MERIT/REMA domain is derived; This is done in the subroutine det_topo_grid.

Before the raw topography can be aggregated on the target grid, the target variables must be allocated. These variables include the land fraction (FR_LAND), the elevation of the surface (hh_target), the standard deviation of the elevation (stdh_topo), the roughness length of the topography (z0_topo), the sub-grid scale orography parameters (theta_topo, aniso_topo and slope_topo) and the topographical corrected radiation parameters (slope_asp, slope_ang, horizon and skyview). For the ICON grid some additional parameters must also be allocated.

The following paragraphs describe computations on the raw data grid.

The subroutine agg_topo_data_to_target_grid does the actual work of aggregating the raw topography to the target grid. The whole topographical data set is divided in bands of 500 grid points in the latitudinal direction and the whole range of the raw data domain in the longitudinal direction (compare for this the black band in Fig. 4). This band is introduced to optimize memory usage, as it is not possible to read the whole raw data in one pass. In order to read the correct raw data the start and end index of each tile (green crosses in Fig. 4) is defined. These indices are additionally associated with a start and end index (red circles in Fig. 4) inside the band. The definition of the two kinds of indices is performed by the routine get_topo_tile_block_indices. With this band the whole raw data is read step by step as suggested in Fig. 4. If the scale separation is desired the same procedure is applied to the 3 km filtered topography.

Figure 4: Schematic illustration of the filling of the raw data with a 500 grid points long band. The green crosses indicate the start end end latitudes and longitudes of each raw topography tile (light blue tiles), whereas the red circles show the indices inside the band, where the green indices of the tiles must be placed.

After this step, a temporary variable of elevation values is filled. This variable consists of three rows, which comprises the whole longitude range of the raw topography data. This is used to deduce the gradients of the topography, which are calculated as averaged differences between one eastern and one western grid point (x-gradient) or with one northern and one southern grid point (y-gradient). From these gradients in x- and y- direction also the squared gradients and the dx\\(\\ast\\)dy are computed.

This is followed by a call of the subroutine find_rotated_lonlat_grid_element_index. This routine defines to which grid element of the target grid a certain grid element of the raw topography belongs. The allocation of the raw data points to the target grid element is performed as shown in Fig. 5 a). All raw data elements that are closer than half a grid point (green box) to the target point (red circle) are used to define the value at the corresponding target grid point. Only the green grid elements in Fig. 5 b) belong to a target grid element. The rest of the raw topography is unused.

Figure 5: a) Illustration of the aggregation of the raw data to the target grid. The red circle indicates a target grid point, while the green rectangle represents the part of the raw data that is aggregated on the target grid point. b) Showing the target grid on top of the raw data set, where only the green grid points of the raw data are used for the target grid.

The elevations of raw data pixels that belong to one target grid element are summed up, and the number of raw data pixels contributing to one target grid element is tracked. A summation of the raw data values for each target grid element is also performed for the squared elevation, which is later used for the standard deviation, and for the gradients calculated before, which are required for the computation of the subgrid scale orography parameters. The latter is only calculated if the SSO parameters are desired. When making use of the scale separation the squared differences between the original and the 3 km filtered topography must be computed at every grid point. This is needed in order to calculate the roughness length specific standard deviation. After these calculations, the temporary rows are shifted to the north and the computation is repeated for the next center line. As soon as a band of 500 rows is finished a new one will be read in.

Now that all auxiliary variables are available, all loops over the raw topography data are closed and a new one over all the grid points of the target grid is opened.

The following paragraphs describe computations on the target grid.

First of all the elevation is calculated as the mean of all the raw topography data points that are enclosed in one target grid point.

As soon as the topography is available on the target grid, the orographical smoothing is applied using the subroutine do_orosmooth.

In a next step the variance and the standard deviation of the elevation at each target grid point is estimated. Subsequently, the SSO parameters angle of principle axis, anisotropy factor and slope parameter are calculated according to Lott and Miller (1996). These SSOs are only calculated if the SSO switch is set to .TRUE. and if the standard deviation of the height is more than 10 meters, as the trivial case of the ocean is tried to be avoided. If the scale separation is switched on the SSOs are based on the 3 km filtered topography. Finally the orographical roughness length is calculated using the standard deviation, but only if at least one raw data pixel is present in the target grid element.

In the case where no raw topography data pixel is available in a target grid, a weighted bilinear interpolation between neighboring raw data grid element is performed to obtain an elevation in all target grid points. This mainly happens if the raw topography has a similar resolution as the target grid. If the bilinear interpolation needs to be applied, all the SSO as well as z0 are set to zero for this grid element. With this step the end of the subroutine agg_topo_data_to_target_grid is reached.

In the program extpar_topo_to_buffer an additional check on SSOs and z0 is performed. If none of the elements of the target grid is associated with at least ten raw data pixels, or as soon as one single element is not associated with any raw data pixel, all the SSOs and z0 are set to zero.

As soon as there is a value for all the target grid elements, the calculation for the topographical corrected radiation parameters can start, if desired at all.

Finally NetCDF files for the orography based external parameters are created, where different NetCDF routines are used for each grid type, as different parameters are needed for each of them. If the lradtopo is set to .TRUE. the enlarged domain is cut back to the user specified domain, before writing it to the NetCDF file.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output","title":"Used namelist files and data in-/output","text":"
  • namelist files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_ORO, INPUT_OROSMOOTH, INPUT_RADTOPO

  • data input (GLOBE): GLOBE_A10.nc - GLOBE_P10.nc

  • data input (ASTER): ASTER_T001.nc - ASTER_T240.nc

  • data input (MERIT/REMA): MERIT_N90-N60_E150-E180.nc4 - REMA_BKG_S60-S90_W180-W150.nc4

  • data input (filtered): GLOBE_A_filt_lanczos_window.nc - GLOBE_P_filt_lanczos_window.nc, GLOBE_A_filt_tukey_0.75_3.0_it4.nc - GLOBE_P_filt_tukey_0.75_3.0_it4.nc

  • Output: buffer file with orography data (/orography_io_extpar/ orography_buffer_file) output file with orography data (used in extpar_cru_to_buffer) (/orography_io_extpar/ orography_output_file)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_landuse_to_buffer","title":"extpar_landuse_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_1","title":"Short description","text":"

The executable extpar_landuse_to_buffer aggregates the land use data to the target grid. Five different raw datasets can be processed: Globcover, GLC2000, GLCC, ESA CCI-LC and Ecoclimap Second Generation (Ecoclimap-SG from here onwards). As GLC2000 and Globcover do not include Antarctica, GLCC or ESA CCI-LC data can be used for the missing areas. The landuse executable also includes the TERRA-URB module, controlled by the logical switch l_terra_urb; see section 3.2.2 for details.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition_1","title":"Target grid definition","text":"

The definition of the target grid is done by reading the namelist INPUT_grid_org. This namelist contains the information about the grid type, which can either be ICON or COSMO. With the information about the grid type, the namelist containing the grid definition can be read. The name of the namelist must be changed manually by the user, according to the chosen grid type. The namelist must either be INPUT_ICON or INPUT_COSMO. For a more exact description of the target grid definition, read the subsection 'Target grid definition' in section 3.1. After specifying the grid definition the southern band of the target grid is defined. This information is important, as the two raw data sets GLC2000 and Globcover do not cover the region below 60 degrees south. If this region is desired by the user, the third data set must be considered for the domain below the southern band. Additionally the target fields for the land use data are allocated.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-landuse-data","title":"Raw landuse data","text":"

In a next step the namelist INPUT_LU is read. It contains an integer switch (i_landuse_data) that gives the possibility to choose between the five different raw data sets e.g., 1 (Globcover), 2 (GLC2000), 3 (GLCC), 5 (ESA CCI-LC), and 6 (Ecoclimap-SG). For Globcover one can additionally choose to use the corine landuse dataset by setting the logical switch (l_use_corine) to TRUE. Furthermore the path and the filename of the desired raw data and of GLCC are specified there. The user must adjust the filename and path manually according to the chosen raw data in i_landuse_data. In addition the name of the desired lookup table is read, which again can be chosen by the user using an integer switch ilookup_table_lu. The lookup tables are described in more detail in Table 5. The names of the buffer files for the target landuse fields and for the target GLCC fields are also specified in this namelist. Finally, the aforementioned l_terra_urb logical switch can be specified (the default value is .FALSE.).

After having read the namelists, the number of tiles of the raw data set is defined. The number of tiles is set to 1 as default and must only be changed for the raw data set Globcover or ESA CCI-LC, which are composed of 6 tiles. The basic information of the Globcover tiles, such as the latitude and longitude edges and the resolution is allocated according to the number of tiles. Later these variables are filled with the respective information, read from the NetCDF files directly.

For the remaining procedures the three different raw land use data have their separate routines, which are constructed identically.

The allocation of the data is done using the number of grid points in the latitudinal and longitudinal direction. Furthermore the land-use target fields are allocated using the target grid for the dimension size and the number of land-use classes. The land-use classes differ for the three raw data sets and are described in more detail in Table 4.

Data Set Number of Class Name of Class (Total number of Classes) GLOBCOVER (23) 01 irrigated croplands 02 rainfed croplands 03 mosaic cropland (50-70%) - vegetation (20-50%) 04 mosaic vegetation (50-70%) - cropland (20-50%) 05 closed broadleaved evergreen forest 06 closed broadleaved deciduous forest 07 open broadleaved deciduous forest 08 closed needleleaved evergreen forest 09 open needleleaved decid. or evergr. forest 10 mixed broadleaved and needleleaved forest 11 mosaic shrubland (50-70%) - grassland (20-50%) 12 mosaic grassland (50-70%) - shrubland (20-50%) 13 closed to open shrubland 14 closed to open herbaceous vegetation 15 sparse vegetation 16 closed to open forest regulary flooded 17 closed forest or shrubland permanently flooded 18 closed to open grassland regularly flooded 19 artificial surfaces 20 bare areas 21 water bodies 22 permanent snow and ice 23 undefined Corine (23) Corine (23) (CLC: 2.1.2, 2.1.3) 11 irrigated croplands (CLC: 2.1.1) 14 rainfed croplands (CLC: 2.4.2, 2.4.3) 20 mosaic cropland (50-70%) - vegetation (20-50%) (CLC: 2.4.4) 30 mosaic vegetation (50-70%) - cropland (20-50%) 40 closed broadleaved evergreen forest (CLC: 3.1.1) 50 closed broadleaved deciduous forest 60 open broadleaved deciduous forest (CLC: 3.1.2) 70 closed needleleaved evergreen forest (CLC: 1.4.1) 90 open needleleaved decid. or evergr. forest (CLC: 3.1.3) 100 mixed broadleaved and needleleaved forest (CLC: 2.2.3, 3.2.4) 110 mosaic shrubland (50-70%) - grassland (20-50%) (CLC: 2.2.2, 3.2.2) 120 mosaic grassland (50-70%) - shrubland (20-50%) (CLC: 2.2.1) 130 closed to open shrubland (CLC: 2.3.1, 3.2.3) 140 closed to open herbaceous vegetation (CLC: 3.2.1) 150 sparse vegetation 160 closed to open forest regulary flooded (CLC: 4.1.2) 170 closed forest or shrubland permanently flooded (CLC: 4.1.1) 180 closed to open grassland regularly flooded (CLC: 1.1.1, 1.1.2, 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.3.3, 1.4.2) 190 artificial surfaces (CLC: 3.3.1, 3.3.2, 3.3.3, 3.3.4, 1.3.1, 1.3.2) 200 bare areas (CLC: 4.2.1, 4.2.2, 4.2.3, 5.1.1, 5.1.2, 5.2.1, 5.2.2, 5.2.3) 210 water bodies (CLC: 3.3.5) 220 permanent snow and ice (CLC: 9.9.9) 230 undefined GLC2000 (23) 01 evergreen broadleaf tree 02 deciduous broadleaf tree closed 03 deciduous broadleaf tree open 04 evergreen needleleaf tree 05 deciduous needleleaf tree 06 mixed leaf tree 07 fresh water flooded tree 08 saline water flooded tree 09 mosaic tree / other natural vegetation 10 burnt tree cover 11 evergreen shrubs closed-open 12 deciduous shrubs closed-open 13 herbaceous cover closed-open 14 sparse herbaceous or grass 15 flooded shrub or herbaceous 16 cultivated and managed areas 17 mosaic crop/tree/natural vegetation 18 mosaic crop/shrub or grass 19 bare areas 20 water bodies 21 snow and ice 22 artificial surfaces 23 undefined GLCC (24) 01 urban and built-up land 02 dryland cropland and pasture 03 irrigated cropland and pasture 04 mixed dryland/irrigated 05 cropland/grassland mosaic 06 cropland/woodland mosaic 07 grassland 08 shrubland 09 mixed shrubland/grassland 10 savanna 11 decidous broadleaf forest 12 decidous needleleaf forest 13 evergreen broadleaf forest 14 evergreen needleleaf forest 15 mixed forest 16 water bodies 17 herbaceous wetland 18 wooded wetland 19 barren or sparsely vegetated 20 herbaceous tundra 21 wooded tundra 22 mixed tundra 23 bare ground tundra 24 snow or ice Ecoclimap-SG (33) 01 sea and oceans 02 lakes 03 rivers 04 bare land 05 bare rock 06 permanent snow 07 boreal broadleaf deciduous 08 temperate broadleaf deciduous 09 tropical broadleaf deciduous 10 temperate broadleaf evergreen 11 tropical broadleaf evergreen 12 boreal needleleaf evergreen 13 temperate needleleaf evergreen 14 boreal needleleaf deciduous 15 shrubs 16 boreal grassland 17 temperate grassland 18 tropical grassland 19 winter C3 crops (lower T) 20 summer C3 crops 21 C4 crops (warmer environments) 22 flooded trees 23 flooded grassland 24 LCZ1: compact high-rise 25 LCZ2: compact midrise 26 LCZ3: compact low-rise 27 LCZ4: open high-rise 28 LCZ5: open midrise 29 LCZ6: open low-rise 30 LCZ7: lightweight low-rise 31 LCZ8: large low-rise 32 LCZ9: sparsely built 33 LCZ10: heavy industry

Table 4: Land-use classes for the different raw data sets. The Corine LandCover (CLC) classes in the left column indicate how the CLC is mapped to the corresponding GlobCover class.

After the allocation of the data a check is performed to query, if the user desires a domain that goes beyond the southern bound of the raw data. If it is the case, the GLCC target fields are allocated as well.

In case that Globcover is used, the grid for the single tiles must be defined as well.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-raw-land-use-data-to-the-target-field","title":"Aggregation of the raw land-use data to the target field","text":"

The definition and allocation part is done and the most important part, the aggregation of the raw data to the target grid can be performed. In order to be able to aggregate the data, the lookup table must first be initialized. The initial values differ for the various settings listed in Table 5. Also the name of the lookup table must be defined using the integer numbers specified in the namelist INPUT_LU. The integer number are listed together with their associated lookup table names in Table 5.

Raw Data Integer Setting Name of the lookup table GLOBCOVER 1 operational settings Asensio, 2011 2 experimental settings, analog to lookup tables of ECOCLIMAP Asensio, 2010 GLC2000 1 operational settings of GME Ritter, 2007 2 operational settings of COSMO Heise, 2005 3 experimental settings, analog to lookup tables of ECOCLIMAP Asensio, 2010 GLCC 1 operational settings of GME Ritter, 2007 2 operational settings of COSMO Heise, 2005 3 experimental settings, analog to lookup tables of ECOCLIMAP Asensio, 2010 ESA CCI-LC 1 experimental settings Helmert, 2019 Ecoclimap-SG 1 Globcover analogue with added LCZs from Oke

Table 5: Names of the lookup tables and the different possible settings for each raw land-use data set.

The following paragraphs describe computations on the raw data grid.

For GLC2000 and GLCC, the raw data is read in lines of a complete longitude going from 180 degrees east to 180 degrees west, through a loop over the latitude. Before any calculation is performed, it is tested if the value of the latitude is contained inside the targed domain. In case it is not, the loop is cycled. Reading of the data line-wise can be done from the NetCDF file directly.

Using the routine find_nearest_target_grid_element each raw data pixel is assigned to a target grid point. A more precise description and a figure that describes the procedure can be found in paragraph 'Aggregation of the raw topography to the target grid' and in Fig. 5 in section 3.1.

As Globcover and ESA CCI-LC are composed of six tiles, the reading of the raw data must be performed in a different way than for the other three data sets. The reading of the data for Globcover is done in the same way as for the topography. Compare the paragraph 'Aggregation of the raw topography to the target grid' in section 3.1. As there is no need to calculate gradients for the land use, the corresponding variable, which contains three lines of raw data, is not used.

The lookup table is then fed with the land use class, which gives a value for all the target fields listed in Table 6.

Variable long name Variable short name Fraction Land FR_LAND Ice fraction FR_ICE Plant cover maximum PLCOV_MX Plant cover minimum PLCOV_MN Leaf area index maximum LAI_MX Leaf area index minimum LAI_MN Minimal stomata resistance RS_MIN Urban area fraction URBAN Fraction of deciduous forest FOR_D Fraction of evergreen forest FOR_E Longwave surface emissivity EMISS_RAD Root depth ROOTDP Roughness length Z0

Table 6: The variables that are computed using the raw land-use data.

The number of grid points that fall into the same target grid and land use class are summed up. The values of the target fields are weighted with the whole pixel area and summed up. Except for the emissivity, which is the only land-use parameter that also has valid values over water, only land pixels are considered. Values that depend on the plant cover, such as PLCOV_MX, PLCOV_MN, LAI_MN, LAI_MX, RS_MIN, FOR_E, FOR_D, ROOTDP and z0, are weighted with the plant cover maximum in addition to the pixel area.

The following paragraphs describe computations on the target grid.

The total area and the land area of each target grid point is first defined. Then the weighted sums of the target fields derived in the previous step are normalized to obtain the definite values. The emissivity and the number of land use classes are normalized by the total area to obtain the correct emissivity and area fraction of each land use class. The other parameters are only considered if the area_land is larger than zero: FR_LAND and FR_ICE are normalized with the total area, URBAN, FOR_D, FOR_E, PLCOV_MN and PLCOV_MX are normalized by the land area, the ROOTDP, LAI_MN, LAI_MX and RS_MIN are normalized by the area covered by plants. If only sea pixels are found, all the fields are undefined.

Finally land-use classes are defined for target grid points that do not contain any raw data pixel. In contrary to the topography, where a bilinear interpolation is performed, here the nearest neighbor is searched. The associated land use class is used with the lookup tables, and the target fields are defined.

The target fields are written to a NetCDF buffer file, which can later be used for the consistency check. There is a file for the chosen land use data set, and one, if needed at all, for the GLCC land use data. Finally the allocated memory is deallocated again.

"},{"location":"user_manual/user_manual_03_fortran_modules/#terra_urb","title":"TERRA-URB","text":"

NOTE: currently the TERRA-URB module in EXTPAR only works with the Ecoclimap-SG database, as this is the only database available for extpar with an LCZ map.

The executable extpar_landuse_to_buffer also includes the TERRA-URB module, controlled by the logical switch l_terra_urb. This module uses a 2D map of local climate zones (LCZ) to determine a set of urban canopy variables used by TERRA-URB in COSMO/ICON, see Table 7. The module aggregates the variables and outputs them to the lu_buffer_file. The aggregation procedure follows that of the other land use variables described in the previous sections. The TERRA-URB related variables then pass through the subprogram extpar_consistency_check (see section 3.7) and are written out to the final extpar file for both COSMO and ICON. ICON would typically ignore these fiels and just use the information from the LU_CLASS_FRACION field, as is done for other land use variables, except for when ntiles=1 in which case it needs the 2D fields. The ISA and AHF EXTPAR modules must be turned off when running with l_terra_urb=.true, as these fields are computed within the TERRA-URB module. The code for this module is based upon Matthias Demuzere's WUDAPT-to-COSMO [@Varentsov2020] and Handrik Wouters' SURY [@Wouters2016] codes. The LCZ look-up tables are based on the values published in [@Stewart2012; @Stewart2014].

Variable name Description FR_URBAN Urban area fraction ISA Impervious surface area AHF Anthropogenic heat flux FR_PAVED Fraction of impervious surface area URB_FR_BLD Urban building fraction URB_H_BLD Urban building height URB_H2W Urban canyon height to width ratio URB_ALB_SO Urban shortwave (solar) albedo URB_ALB_TH Urban thermal albedo URB_EMIS Urban emissivity URB_HCON Urban mean heat conductivity URB_HCAP Urban mean heat capacity

Table 7: Varialbes provided by the TERRA-URB module

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_1","title":"Used namelist files and data in-/output","text":"
  • namelists files:

    • INPUT_grid_org
    • INPUT_COSMO_GRID
    • INPUT_ICON_GRID
    • INPUT_LU
  • data input:

    • GLC2000_byte.nc, GLCC_usgs_class_byte.nc
    • CORINE_globcover.nc
    • GLOBCOVER_0_16bit.nc - GLOBCOVER_5_16bit.nc
    • ECCI_300m_0.nc - ECCI_300m_5.nc
    • ECOCLIMAP_SG.nc
  • Output:

    • buffer file with landuse data (/lu_io_extpar/ lu_buffer_file)
    • buffer file with GLCC data (/glcc_io_extpar/ glcc_buffer_file)
"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_aot_to_buffer","title":"extpar_aot_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_2","title":"Short description","text":"

The executable extpar_aot_to_buffer aggregates aerosol optical thickness data to the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition_2","title":"Target grid definition","text":"

The definition of the target grid is again done using the namelist INPUT_grid_org. As the subroutines are exactly the same as the ones used in extpar_topo_to_buffer, it is referred to the subsection 'Target grid definition' in section 3.1, where the procedure is explained in more detail.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-aerosol-optical-depth-data","title":"Raw aerosol optical depth data","text":"

The namelist INPUT_AOT is kept very simple. It contains only the path and the name of the raw aerosol optical depth data. The integer switch (iaot_type) informs EXTPAR which of the 4 available datasets has been chosen: 1 (Tegen), 2 (AeroCom), 3 (MACC-II), 4 (MACv2) or 5 (CAMS) . Additionally, also the filenames of the buffer and output files for the aggregated data is specified.

In order to allocate the variables used to read the raw data, the dimensions of the raw data is defined. These dimensions include the number of rows and columns of the NetCDF raw data file, the number of months, which is equal to 12, as a full yearly cycle is described, and the number of types of aerosols contained in the raw data file. This number is 5 for iaot_type=1,2 or 3 , as the raw data file contains the aerosol optical thickness information of black carbon, dust, organic matter, sulfate and sea salt. iaot_type=4 is used for a new formulation of the radiation-aerosol interaction available only in version of COSMO later than 5.04. This provides data of the aerosol optical thickness, the single scattering albedo and the asymmetry factor for the 8 spectral bands defined in the RG92 radiation scheme. iaot_type=5 is used only for ICON model. The raw data file contains the layer-integrated mass information of 11 types of aerosols: Sea Salt (3 bin), Mineral Dust (3 bin), hydrophilic and hydrophobic organic matter, hydrophilic and hydrophobic black carbon and sulfate. Also the raw data file contains the pressure for 60 vertical levels. The 3 first data-sets which provide raw data for different aerosol types refer to Tegen1, AeroCom2 and MACC-II3 whereas the fourth data-set is derived from MACv24 and the fifth data-set is derived from CAMS5.

In a next step, the complete raw data is read into memory; this is possible since the aerosol optical depth raw data is of rather coarse resolution (see Table 8). Also, the grid of the raw data is determined from NetCDF meta data. Before the aggregation to the target grid can start, the target grid fields must be allocated, using the target grid, the number of months and aerosol types or spectral bands.

Raw data set resolution Tegen 4 x 5 degree AeroCom 1 x 1 degree MACC-II 1.125 x 1.125 degree MACv2 1 x 1 degree CAMS 3 x 3 degree x 60 levels

Table 8: Resolution of raw data-sets for aerosol optical depths.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-aerosol-optical-depth-to-the-target-field","title":"Aggregation of the aerosol optical depth to the target field","text":"

As the resolution of all raw data sets is so coarse, there is no need to go through the whole raw data set and find the corresponding target grid element. Here there is only one loop over the target grid. For every target grid element four surrounding raw data points are searched for. With these four points, a weight for the bilinear interpolation is computed. As the raw data grids of the 5 different aerosols are equal, the four surrounding points are the same for all months and aerosol types. Four new arrays (SW, SE, NE, NW) are then defined, which contain the four neighbor values, for each month and each type. These can now be used, together with the previously calculated weights, to calculate the bilinear interpolation.

Finally the data is saved in a NetCDF buffer and an output file, and the allocated variables are deallocated.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_2","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_AOT

  • data input: aot_GACP.nc, aod_AeroCom1.nc, aod_MACC_2003-2012.nc, aod_MACC_2003-2012_proc.nc, aot_MACv2.nc, aot_CAMS_2003-2013.nc

  • Output: buffer file with aerosol data (/aerosol_io_extpar/ aot_buffer_file)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_soil_to_buffer","title":"extpar_soil_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_3","title":"Short description","text":"

The executable extpar_soil_to_buffer aggregates soil data of the FAO Digital Soil Map of the World or of the Harmonized World Soil Data (HWSD) to the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition_3","title":"Target grid definition","text":"

The definition of the target grid is again done using the namelist INPUT_grid_org. As the subroutines are exactly the same as the ones used in extpar_topo_to_buffer, it is referred to the subsection 'Target grid definition' in section 3.1, where the procedure is explained in more detail.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-soil-data","title":"Raw soil data","text":"

The variables for the raw soil data are read from the namelist INPUT_SOIL. These variables are the path and the names of the raw data files and two switches to decide whether the FAO or the HWSD data should be used and if the deep soil data is desired or not. The integer switch isoil_data determines the raw data and processing used: 1 for FAO, 2 for the HWSD data-set6 and 3 for the use of HWSD data with mapping to TERRA soil types. The switch to choose the production of deep soil information is a logical (only applicable to isoil_data=2). Additionally, the names of the buffer files are specified. Be aware that a change of the integer switch from FAO to HWSD requires also the manual replacement of the raw data file names in the namelist.

After reading the namelist, a check is made on the production of subsoil characteristics. This is only supported for HWSD data, and a warning is issued in case of bad usage.

The dimensions of the raw soil data are defined, which include the number of grid points in the latitudinal and longitudinal direction, as well as the number of soil data code of the raw data. These values are needed to allocate the soil data with the proper size.

The mapping between raw data sets specific codes and some standard soil types is defined; this concerns the soil types undefined, default, ice and water.

As the soil data is provided in one single file, all data can be read in one shot. The data that are read from the NetCDF file are the texture and the slope of the soil data and the soil code. The aggregation of the data is done in a different way for the FAO and HWSD data, as these result in two completely different variables. Moreover, for HWSD data, to conserve memory, the topsoil data are allocated first and aggregated to the target grid, before the same is done for the subsoil.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-fao-and-hwsd-data-with-terra-mapping-to-the-target-grid","title":"Aggregation of the FAO and HWSD data with TERRA mapping to the target grid","text":"

The following paragraphs describe computations on the raw data grid.

The soil data is read using a loop over the latitude and the longitude. This results in a point-wise reading of the raw data. As soon as the point is read, its corresponding target grid element is defined. If the regular latitude/longitude grid point is not contained in the target grid, a new point is read. If however the point is inside the target grid, the aggregation can begin.

The number of raw data pixels is increased by one, if a raw data point can be assigned to a target grid point. This number is later used to define the fraction land defined by the soil data. The corresponding soil unit is deduced from the raw data. If the soil unit is zero, this is an ocean pixel and the number of sea points is increased by one. If the soil code differs from zero, the number of land points is increased by one. The soil code is then associated to either a special or a normal soiltype. For all the special soiltypes such as ice, rock, salt, histosols, dunes and no data flags the respective texture (coarse, medium, fine) are defined using a lookup table. All other soil units are described using the texture available in the raw data. These values define the final texture variable texture.

The following paragraphs describe computations on the target grid.

In the following a loop is opened over the target grid points. First of all the fraction land is defined using the number of land pixels minus the number of inland water pixels, which is then averaged by the number of raw data pixels that were available for the target grid element. In a next step the texture for every target grid element is defined. For the special soiltypes (texture larger than 900) the corresponding number is associated. For the normal soiltypes (texture smaller than 900) the texture is calculated as average of the summed up texture. The resulting texture value is multiplied by 100 and converted into an integer number. This number is used to associate the final soiltype to every target grid element. The soiltypes are described in more detail in table 9. For target grid points that do not contain any raw data points, the nearest neighbor in the raw data is defined. If the target grid point is outside the raw data grid the slope is defined as zero and the texture as undefined.

TERRA Code Soiltype raw data code 1 ice and glacier7 9001 2 rock, lithosols 9002 3 sand 9003 (salt), 9005 (shifting sands and dunes) and coarse texture 4 sandy loam coarse to medium texture 5 loam (default soiltype) 9009 (undefined), 9012 (dominant part undefined), medium texture 6 loamy clay medium to fine texture 7 clay fine texture 8 histosols (peat) 9004 9 water 9000 (undefined: inland water), -9 (undefined: ocean)

Table 9: TERRA soiltypes and their respective FAO raw data codes.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-hwsd-data-to-the-target-grid","title":"Aggregation of the HWSD data to the target grid","text":"

The aggregation starts again with a loop over the latitudes and longitudes. For each grid point a target grid element is looked for. If there is a target grid element, the aggregation can start. The soiltype is defined using the raw data value, if it is above zero, and zero otherwise. Additionally, all the ocean, land and lake points are counted in order to determine the land fraction which is calculated as the difference between the summed up land and lake points normalized by the number of raw data pixels available. For target grid points with no raw data, the nearest neighbor in the raw data is defined.

The resulting soiltype is not yet usable, as it contains numbers coded in a world code and not in TERRA soiltypes. This transformation is done in the consistency check, where the special soiltypes of the HWSD data, specified in Table 10, are packed in the variable SOILTYP the normal soiltypes are given in fractions of sand, silt, clay and organic carbon, and the bulk density is also given.

TERRA Code Soiltype TERRA Code Soiltype 1 ice and glacier 8 histosols (peat) 2 rock, lithosols 9 water 3 sand 10 alkali flat 4 sandy loam 11 shifting sand, dunes 5 loam (default soiltype) 12 Urban, human disturbed 6 loamy clay 225 Unknown 7 clay

Table 10: New TERRA soiltypes deduced from the HWSD data.

"},{"location":"user_manual/user_manual_03_fortran_modules/#output-of-the-soil-data","title":"Output of the soil data","text":"

The soiltypes and the fraction land, together with the undefined value, the latitudes and longitudes are saved in a NetCDF buffer file. This is later used to perform the consistency check, which is especially important for the HWSD data, as the main transformation of the data takes place there.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_3","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_SOIL

  • data input: FAO_DSMW_double.nc, FAO_DSMW_float.nc, HWSD0_30_topsoil.nc, HWSD30_100_subsoil.nc

  • Lookup tables for HWSD: LU_TAB_HWSD_UF.data, HWSD_DATA_COSMO.data, HWSD_DATA_COSMO_S.data

  • Output: buffer file with soil data (/soil_io_extpar/ soil_buffer_file)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_flake_to_buffer","title":"extpar_flake_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_4","title":"Short description","text":"

The executable extpar_flake_to_buffer aggregates lake depth data and lake fraction to the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition_4","title":"Target grid definition","text":"

The definition of the target grid is again done using the namelist INPUT_grid_org. As the subroutines are exactly the same as the ones used in extpar_topo_to_buffer, it is referred to the subsection 'Target grid definition' in section 3.1, where the procedure is explained in more detail.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-lake-data","title":"Raw lake data","text":"

As only the target grid dimensions are needed to allocate the target fields, this is done right after the definition of the target grid. Then the namelist INPUT_FLAKE is read to define the path and the filename of the raw lake data. Also the names of the buffer and the output file for the consistency check are given. Once more the dimensions of the raw data are needed to allocate the raw data correctly; these dimensions are deduced from the netcdf file directly and the raw data grid is defined.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-lake-data-to-the-target-grid","title":"Aggregation of the lake data to the target grid","text":"

The following paragraphs describe computations on the raw data grid.

The data is read row-wise, through a loop over the latitudes, shipping all latitudes not inside the user specified domain. If a row is kept, a new loop over the longitudes is started to treat the raw data point-wise. For each point, the corresponding target field element is defined. This is done in the same way described in the subsection 'Aggregation of the topography to the target grid' in section 3.1 and Fig. 5. The number of raw data pixels that contribute to the target grid value are summed up as well as the lake depth, which is multiplied by a scale factor deduced from the area of each pixel that contributes to a lake fraction.

The following paragraphs describe computations on the raw data grid.

The lake fraction is derived and the lake depth is obtained by normalizing the weighted sum previously computed. Where no lake depth is available the value is set to undefined (-1). In case that no raw data pixel is available the nearest neighbor in the raw data is searched for.

The target fields are then written to a netcdf buffer and output file. Finally the allocated memory can be released.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_4","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_FLAKE

  • data input: GLDB_lakedepth.nc

  • Output: buffer file with flake data (/flake_io_extpar/ flake_buffer_file)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_hwsdART_to_buffer","title":"extpar_hwsdART_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_5","title":"Short description","text":"

This program processes HWSD (Harmonized World Soil Database) data and aggregates it onto a target grid.

The code is a module named \"mo_agg_hwsdART\" that contains a subroutine called \"agg_hwsdART_data_to_target_grid\". This subroutine is used to aggregate data from the HWSD dataset to a target grid. The HWSD dataset contains soil unit information classified according to the USDA soil classification system.

The module uses several other modules, including \"mo_logging\" for logging purposes, \"mo_kind\" to define kind parameters, \"mo_hwsdART_data\" to define the different soil types according to the USDA classification, \"mo_hwsdART_tg_fields\" to define variables related to the target grid, and \"mo_grid_structures\" to define grid structures.

The subroutine takes input parameters including the target grid structure (\"tg\"), the HWSDART soil unit data (\"hwsdART_soil_unit\"), the grid of HWSDART data (\"hwsdART_grid\"), and the longitude and latitude coordinates of the HWSDART grid (\"lon_hwsdART\" and \"lat_hwsdART\").

The subroutine initializes local variables and arrays to store the counts of different soil types in each grid element of the target grid. It also sets an undefined integer value and initializes the count of raw data pixels to zero.

The subroutine then iterates over the HWSDART grid and finds the nearest target grid element for each raw data pixel using the \"find_nearest_target_grid_element\" function. If the raw data pixel is out of the range of the target domain, it is skipped.

For each valid raw data pixel, the subroutine counts the number of raw data pixels in the target grid element and increments the count for the corresponding soil type in the local arrays.

After the iteration over the HWSDART grid, the subroutine iterates over the target grid to calculate the fraction of each soil type in each grid element. It divides the count of each soil type by the total number of raw data pixels in the grid element and stores the fractions in the corresponding variables.

The code aggregates the HWSD soil data in USDA scheme to a target grid, calculating the fraction of each soil type in each grid element for application in ICON-ART simulations.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_5","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_ICON_GRID, INPUT_hwsdART

  • data input: HWSD0_USDA.nc

  • Output: buffer file with fraction of soil type classes (hwsdART_extpar_ICON.nc)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_consistency_check","title":"extpar_consistency_check","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_6","title":"Short description","text":"

The extpar_consistency_check is performed after all raw data have been aggregated to the target grid to remove any inconsistencies that may appear among the different data and to derive additional information using multiple raw data sources.

"},{"location":"user_manual/user_manual_03_fortran_modules/#reading-of-namelists","title":"Reading of namelists","text":"

Before the grid is defined, the namelists INPUT_RADTOPO, INPUT_ORO and INPUT_SOIL are read to obtain the settings of the different switches that are used (e.g. lradtopo, itopo_type, lsso_param, isoil_data, ldeep_soil). Then the namelist INPUT_grid_org is read to obtain the target grid information and the grid type.

In a next step the INPUT_LU is read by extpar_consistency_check to check if the GLCC data set is required, which is the case if the target grid domain reaches more to the south than the chosen raw land-use data set. (Globcover and GLC_2000 are not global.)

If the namelist INPUT_ERA is present (indicating that one uses the ERA climatologies generated by extpar_era_to_buffer) the buffer file name is retrieved. If this namelist is not present (legacy climatologies from ICON-REMAP-TOOL are used), the buffer file names in INPUT_CHECK are read. After that step, all other namelists of the EXTPAR modules are read in order to retrieve the buffer file name for each data set. These files are read and all the variables needed for the final external parameters file are allocated.

An additional namelist that is used is INPUT_CHECK, it contains a couple of switches to define the processing in the consistency check.

The first task after reading the namelists is to derive the correct land sea mask from the land use data. If the GLCC data must be used, the land sea mask below the southern band is deduced from GLCC.

Then the total roughness length is computed as the sum of the roughness length deduced from the land-use and the topography.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-for-water-and-ice-pixels","title":"Consistency check for water and ice pixels","text":"

The definition of a water grid element is based on the land-use data. The vegetation is set to zero for all water grid elements and FAO derived soil type is set to water. For non water pixels with undefined or invalid soil type, the FAO derived soil type is either set to default, which is loam, or to ice for regions that are below 60 degrees south (where only Antarctica is located).

All the points that are classified as ice in the land-use data but not in the FAO derived soil type, are changed to ice in the latter; the vegetation of these pixels is set to zero.

The HWSD derived soiltype needs a transformation from the world code to the TERRA code, which is performed here. The world code is decoded with the TERRA HWSD lookup table, to define the regions that contain a special soiltype (see the special soiltypes in Table 10). For each grid point the world code is associated to the single fractions of the soil composition, using an other lookup table. If there is a point that does not contain a bulk density it is calculated using the formula of the cultivated topsoil or the compact subsoil from Hollisa et al. (2012)8 and Woesten et al. (1999)9. Furthermore there is a special treatment of peat with histosols. The whole procedure is also done for the subsoil, if it is desired at all.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-lake-data","title":"Consistency check of lake data","text":"

Water grid points are either declared as lake or ocean, thus over land a fraction lake and over the ocean a fraction ocean is defined. Where the fraction land deduced from the topography is smaller than 0.99 the fraction ocean is defined. All the other points are used to determine the fraction lake. Both fractions are defined such that fr_lake or fr_ocean plus fr_land_lu (fraction land deduced from land-use) sum up to one. Some smaller seas must be defined manually, thus for the region of the Dead Sea and the Caspian Sea not fraction lake but fraction ocean is calculated.

For fr_land 10 and fr_ocean 11 larger than a half, the lake depth is set to undefined. A default value for the lake depth is used for grid elements with a lake fraction 12 larger than a half and a negative lake depth. Additionally a maximum and minimum lake depth is defined. Included is also a manual correction of the depth of Lake Constance.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-albedo-data","title":"Consistency check of albedo data","text":"

The consistency check of the albedo data concerns land pixels that have a albedo smaller than 0.07. For these pixels a weighted bilinear interpolation is performed. Only land points are used for the interpolation, if there is no surrounding land point a warning message is printed. Values that are still too small receive a soiltype dependent albedo. This is done for all three wavelengths.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-ndvi-data","title":"Consistency check of NDVI data","text":"

The next consistency check is performed with the normalized difference vegetation index (NDVI). The NDVI values are set to undefined for water grid points. Additionally, values that are smaller than a predefined value are set to exactly this value.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-the-temperature-climatology","title":"Consistency check of the temperature climatology","text":"

The consistency check of the temperature climatology contains a height correction and is only performed for the finer resolved temperature climatology (e.g. it_cl_type = 1). The temperature is set to undefined for all the sea points. For land points that have a valid temperature, it is adjusted to the height. This is done by considering a constant temperature rate of 0.65 K per 100m:

\\(\\frac{dT}{dh} = -\\frac{0.65 K}{100 m}\\).

Target points that do not contain temperature values larger than zero are filled with surrounding values. First a valid point is looked for in the surrounding \\(3\\times3\\) grid box. If still no valid point can be found, it is searched along the longitude, and if nothing else helps the nearest neighbor is tried.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-all-other-fields","title":"Consistency check of all other fields","text":"

All other fields are assumed to be independent and are written to the output file exactly as they were read in. A special treatment applies to the ISA, AHF, EMISS and S_ORO fields. Whenever their respective namelist input file is missing in the working directory where extpar_consistency_check is executed these fields are not added to the output file. An exception to this rule applies to the ISA and AHF fields which are added to the output file if the logical switch l_terra_urb is set to .TRUE. in the INPUT_LU namelist; see section 3.2.2 for more details.

"},{"location":"user_manual/user_manual_03_fortran_modules/#definition-of-special-points","title":"Definition of special points","text":"

Be aware that the definition of special points has only been tested for the COSMO grid and can only be used if the FAO raw soil type is used. At the moment there are three special points (1: Falkenberg, 2: Waldstation, 3: Lindenberg). At each of these points, values for soiltype_sp, z0_sp, rootdp_sp, plcovmn_sp, plcovmx_sp, laimn_sp, laimx_sp can be explicitly set by the user. The coordinates of the special point are also user specified. If no special treatment at these points is desired the number_special_points must be set to zero (see Table 11). If no special treatment is desired at all, the integer switch i_lsm_treatment can be set to 1 instead of 2.

number_special_points Treatment of special points 0 NO treatment of special points 1 special treatment of Falkenberg 2 special treatment of Falkenberg and Waldstation 3 special treatment of Falkenberg, Waldstation and Lindenberg

Table 11: Usage of the namelist parameter number_special_points.

"},{"location":"user_manual/user_manual_03_fortran_modules/#reduced-main-memory-usage","title":"Reduced main memory usage","text":"

Since Exptar Version 5.4 a new feature was introduced which allows the running of extpar_consistency_check for very high resolution global grids without any restrictions on the hardware memory specifications. A POSIX mmap based implemetation of disk caching arrays is used to use main memory as much as possible and, if more memory is required, the duty to handle this request is delegated to the kernel. A requirement to run this properly is the provision of swap space in the expected total memory use. With this technique we could process a global R2B11 ICON grid (around 1.25 km grid resolution) on a server with 256 GB main memory. Of course processing gets quite slow, but is still in the order of a couple of cups of coffee.

The feature can be enabled with the namelist variable l_use_array_cache = .TRUE. in namelist extpar_consistency_check_io. The namelist variable default is l_use_array_cache =.FALSE., which is selecting the standard heap allocation by Fortran's ALLOCATE statement.

"},{"location":"user_manual/user_manual_03_fortran_modules/#writing-output","title":"Writing output","text":"

The final results are written into a netcdf file. The output file name can be specified in the namelist INPUT_CHECK.

Since EXTPAR Version 5.4 the output possibilities have been extended for ICON only. The EXTPAR output procedure for COSMO did not change with Version 5.4. As ICON and a lot of its associated tools (eg. CDO, DWD icontools) are already using a single abstract interfacing library CDI, a re-implementation for the final EXTPAR output procedure with CDI to prepare for future developments is provided. Note, that this re-implementation replaces the former writing-routine completely. For a detailed description of CDI look at https://code.mpimet.mpg.de/projects/cdi .

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_6","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_CHECK, INPUT_

  • data input: all buffer files from the EXTPAR modules defined in the INPUT_ namelist files

  • data output: netCDF containing all external parameters (/extpar_consistency_check_io/ netcdf_output_filename)

  1. Tegen, I., P. Hollrigl, M. Chin, I. Fung, D. Jacob, and J. Penner 1997. Contribution of different aerosol species to the global aerosol extinction optical thickness: Estimates from model results. J. Geophys. Res., 102, 23895-23915.\u00a0\u21a9

  2. Kinne, S., M. Schulz, C. Textor, S. Guibert, Y. Balkanski, S.E. Bauer, T. Berntsen, T.F. Berglen, O. Boucher, M. Chin, W. Collins, F. Dentener, T. Diehl, R. Easter, J. Feichter, D. Fillmore, S. Ghan, P. Ginoux, S. Gong, A. Grini, J. Hendricks, M. Herzog, L. Horowitz, I. Isaksen, T. Iversen, A. Kirkev\u00e5g, S. Kloster, D. Koch, J.E. Kristjansson, M. Krol, A. Lauer, J.F. Lamarque, G. Lesins, X. Liu, U. Lohmann, V. Montanaro, G. Myhre, J. Penner, G. Pitari, S. Reddy, \u00d8. Seland, P. Stier, T. Takemura, and X. Tie: An AeroCom initial assessment optical properties in aerosol component modules of global models, Atmos. Chem. Phys., 6, 1815-1834, 2006.\u00a0\u21a9

  3. Morcrette, J.-J., O. Boucher, L. Jones, D. Salmond, P. Bechtold, A. Beljaars, A. Benedetti, A. Bonet, J. W. Kaiser, M. Razinger, M. Schulz, S. Serrar, A. J. Simmons, M. Sofiev, M. Suttie, A. M. Tompkins, and A. Untch, 2009: Aerosol analysis and forecast in the ECMWF Integrated Forecast System. Part I: Forward modelling, J. Geophys. Res., 114D, D06206,doi:10.1029/2008JD011235\u00a0\u21a9

  4. Kinne, S., D. O'Donnel, P. Stier, S. Kloster, K. Zhang, H. Schmidt, S. Rast, M. Giorgetta, T. F. Eck, and B. Stevens (2013), MAC-v1: A new global aerosol climatology for climate studies, J. Adv. Model. Earth Syst., 5, 704--740, doi:10.1002/jame.20035.\u00a0\u21a9

  5. Bozzo, A., Benedetti, A., Flemming, J., Kipling, Z., R\u00e9my, S. (2020). An aerosol climatology for global models based on the tropospheric aerosol scheme in the Integrated Forecasting System of ECMWF. Geoscientific Model Development, 13(3), 1007-1034.\u00a0\u21a9

  6. Release 5.0 of COSMO and 2.0 of INT2LM do not support HWSD data, as the representation of the soil associated with this new data set has changed and is based on the use of pedotransfer functions and on fraction of soil components (e.g. clay, silt, ...)\u00a0\u21a9

  7. Soiltypes written in bold indicate a special soiltype.\u00a0\u21a9

  8. J.M. Hollisa, J. Hannamb and P.H. Bellamyb, February 2012, Empirically-derived pedotransfer functions for predicting bulk density in European soils, European Journal of Soil Science, 63, 96109 doi: 10.1111/j.1365-2389.2011.01412.x\u00a0\u21a9

  9. J.H.M. Woesten, A. Lilly, A. Nemes and C. Le Bas, Development and use of a database of hydraulic properties of European soils, Geoderma, Volume 90, Issues 34, July 1999, Pages 169-185, doi: 10.1016/S0016-7061(98)00132-3.\u00a0\u21a9

  10. derived from the land use data\u00a0\u21a9

  11. derived from the land use data\u00a0\u21a9

  12. derived from the lake data set\u00a0\u21a9

"},{"location":"user_manual/user_manual_04_python_modules/","title":"Python Modules","text":""},{"location":"user_manual/user_manual_04_python_modules/#General","title":"General Workflow","text":"

The general workflow of all Python modules is the same. An exemplary workflow of the Python modules is described below:

At the beginning of the program information about the environment on which EXTPAR is running is written to the logfile and all left-overs from prior executions of the same EXTPAR module are deleted. In a next step each parameter from the namelist namelist.py is checked for correctness as well as assigned to an internal variable for later use in the program. The specifaction about the target grid is directly read from the Fortan namelist-files INPUT_grid_org. The next step in the modules involves the generation of all necessary meta-data for the buffer files and the write of a namelist files in the style of a Fortran namelist, containing all information needed for the consistency_check at the end. In case of a COSMO target grid, a grid specification file is written, that is later used by CDO for the interpolation.

After this is all setup, the most compute-intensive parts like the remapping to the target grid or data modifications are done using CDO. The Python program launches a subshell executing the CDO in it. The output from CDO is reshaped in order to fit the dimensions of the buffer files. After the reshape, the fields and its corresponding metadata is written to a netCDF buffer file. The last step of the programme again deletes all intermediate netCDF or other files written during runtime, that do not serve any purpose.

Module-specific modifications or additional computations are described in the paragraph Data processing of each Python module.

"},{"location":"user_manual/user_manual_04_python_modules/#namelist","title":"Namelist","text":"

The namelist namelist.py contains the Python dictionaries input_alb, input_tclim, input_emiss, input_ndvi, input_ahf, input_isa and input_edgar. These dictionaries replace their corresponding Fortran namelist files INPUT_.

input_alb provides information about the albedo data type and the paths and filenames of the input/output data.

input_tclim contains a switch to determine the type of data (coarse or fine) as well as the paths and filenames of the input/output data.

input_emiss contains a switch to determine the type of emissivity data (full range or long-wave) and the filename and paths of the input/output data.

input_ndvi only provides information about the the path and the filenames of the input/output data.

input_era only provides information about the the path and the filenames of the input/output data.

input_isa contains a switch determine the type of ISA data and provides information about the the path and the filenames of the input/output data.

input_ahf contains a switch determine the type of AHF data and provides information about the the path and the filenames of the input/output data.

input_edgar only provides information about the the path and the filenames of the input/output data.

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_alb_to_buffer","title":"extpar_alb_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_alb_to_buffer","title":"Short description of the subprogram extpar_alb_to_buffer","text":"

The executable extpar_alb_to_buffer allows the aggregation of two different kinds of albedo data to the target grid. The first kind is a climatology of monthly values of total albedo derived from MODIS satellite data for the 3 spectral bands visible, near infrared and ultraviolet. The second kind contains information for soil albedo only in dry and saturated conditions. It originates from the Community Land Model1.

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing","title":"Data processing","text":"

The data is remapped to the target grid using the distance-weighted average interpolation. CDO first generates the weights for the interpolation from one of the input files and then applies these weights to all input files. After the interpolation took place, all values in the range of -100000 - 0.02 are set to 0.02 to prevent unrealistic data-points. All other steps in extpar_alb_to_buffer are following the general workflow of the Python scrips.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output","title":"Used namelist files and data in-/output","text":"
  • namelist files: namelist.py (dict: input_alb), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_ALB

  • data input: month_alb.nc, month_alnid.nc, month_aluvd.nc, global_soil_albedo.nc

  • data output: buffer file with albedo data (input_alb: alb_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_cru_to_buffer","title":"extpar_cru_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_cru_to_buffer","title":"Short description of the subprogram extpar_cru_to_buffer","text":"

The executable extpar_cru_to_buffer aggregates the temperature climatology of the Climate Research Unit (CRU) to the target grid. The namelist namelist.py gives the information of the path and the name of the raw temperature climatology data file. Additionally, the filename for the buffer is provided. There is an integer switch (it_cl_type), which allows the choice between a newer higher resolved data set for land surfaces only (1) and an older coarser raw data set for sea surfaces in combination with the higher resolved data set over land (2). Aggregation of the coarse data set over land surfaces is no longer supported since EXTPAR Version 5.4.

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing_1","title":"Data processing","text":"

The data processing with CDO for it_cl_type = 1 involves 4 steps:

  1. Set seapoints in the data to missing value.

  2. Extract the fields HSURF from the fine data set.

  3. Merge the fields from step 1 and step 2.

  4. Remap data from step 3 to the target grid using distance-weighted average interpolation.

The data processing with CDO for it_cl_type = 2 involves 5 steps:

  1. Convert coarse data from Celsius to Kelvin, calculate yearly mean values and remap coarse data to the grid of the higher resolved data set.

  2. Take landpoints from the fine data set and the seapoints from the data processed in step 1.

  3. Extract surface height from the buffer file of extpar_topo_to_buffer

  4. Smooth data processed in step 2 and remap to target grid using distance-weighted average interpolation.

  5. Correct data processed in step 4 with the surface height extracted in step 3.

All subsequent processing on the data follows the general workflow of the Python scripts.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_1","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_tclim), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_TCLIM

  • data input: absolute_hadcrut3.nc, CRU_T2M_SURF_clim.nc, CRU_T_SOIL_clim.nc, orography_buffer_file (it_cl_type = 2 only)

  • Output: buffer file with CRU data (input_tclim: t_clim_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_emiss_to_buffer","title":"extpar_emiss_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_emiss_to_buffer","title":"Short description of the subprogram extpar_emiss_to_buffer","text":"

The executable extpar_emiss_to_buffer aggregates CAMEL (Combined ASTER and MODIS Emissivity for Land) data to the target grid. For the aggregation of the emissivity the namelist namelist.py provides the path and the file name of the input data. The buffer file name is defined as well. There exists the integer switch (iemiss_type) to determine whether one wants to use the broad band emissivity for the 3.6 and 14.3 micron spectral range (1) or the broad band emissivity between 8.0 and 13.5 micron spectral range (2).

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing_2","title":"Data processing","text":"

After the generation of the interpolation weights artificial low values below 0.5 are set to -999. In a subsequent processing step -999 is set to the value for missing data. In order to not have missing data in the field to interpolate, all missing values are set to the values of its nearest neighbour. The last step involves the first order conservative interpolation to the target grid. After the remapping with CDO two additional fields are computed:

  • EMISS_MAX, the maximum EMISS value over 12 months

  • EMISS_MRAT, the monthly ratio with respect to the maximum EMISS

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_2","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_emiss) INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_EMISS

  • data input: CAM_bbe_full_2010-2015\u1e45c or CAM_bbe_lw_2010-2015\u1e45c

  • Output: buffer file with CAMEL data (input_emiss: emiss_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_ndvi_to_buffer","title":"extpar_ndvi_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_ndvi_to_buffer","title":"Short description of the subprogram extpar_ndvi_to_buffer","text":"

The executable extpar_ndvi_to_buffer aggregates NDVI data (Normalized Differential Vegetation Index) to the target grid. The namelist namelist.py only contains the path and the file name of the raw NDVI data. No other parameters can be set.

For the aggregation of the normalized differential vegetation index the namelist namelist.py is simple. It contains the path and the filename of the raw data set, as well as the names of the buffer. No other parameters can be set.

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing_3","title":"Data processing","text":"

The remapping to the target grid uses the first order conservative interpolation. After the remapping with CDO two additional fields are computed:

  • NDVI_MAX, the maximum NDVI value over 12 months

  • NDVI_MRAT, the monthly ratio with respect to the maximum NDVI

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_3","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_ndvi), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_NDVI

  • data input: NDVI_1998_2003.nc

  • Output: buffer file with NDVI data (input_ndvi: ndvi_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_era_to_buffer","title":"extpar_era_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_era_to_buffer","title":"Short description of the subprogram extpar_era_to_buffer","text":"

The executable extpar_era_to_buffer aggregates ERA data (T2M, SST, W_SNOW and ORO) to the target grid. It replaces the two NetCDF-Files generated by ICON-REMAP at DWD. Note that this executable is for Icon-grids only.

For the aggregation of the ERA climatologies the namelist namelist.py is simple again. It contains the type of ERA climatology (ERA5 (1) or ERA-I (2)) the path and the filenames of the raw data sets, as well as the names of the buffer. No other parameters can be set.

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing_4","title":"Data processing","text":"

The remapping to the target grid uses the first order conservative interpolation. After the remapping with CDO the field W_SNOW is scaled by a factor 1000. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_4","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_era), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_ERA

  • data input: ERA5_ORO_1990.nc, ERA5_SD_1990_2019.nc, ERA5_SST_1990_2019.nc and ERA5_T2M_1990_2019.nc ERA-I_ORO_1986.nc, ERA-I_SD_1986_2015.nc, ERA-I_SST_1986_2015.nc and ERA-I_T2M_1986_2015

  • Output: buffer file with ERA data (input_era: era_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_isa_to_buffer","title":"extpar_isa_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_isa_to_buffer","title":"Short description of the subprogram extpar_isa_to_buffer","text":"

The executable extpar_isa_to_buffer allows the aggregation or interpolation of data on the fraction of impervious surface area needed by TERRA_URB to the target grid.

For the aggregation of the ISA the namelist namelist.py is simple again. It contains the type of ISA (NOAA (1) or EEA (2)) the path and the filenames of the raw data sets, as well as the names of the buffer. No other parameters can be set. Note that the underlying processing does not differ between different types of ISA

The remapping to the target grid uses the bilinear interpolation. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_5","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_isa), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_ISA

  • data input: EEA_ISA_16bit_lonlat.nc( isa_type=2), NOAA_ISA_16bit_lonlat.nc (isa_type=1)

  • Output: buffer file with ISA data (input_isa: isa_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_ahf_to_buffer","title":"extpar_ahf_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_ahf_to_buffer","title":"Short description of the subprogram extpar_ahf_to_buffer","text":"

The executable extpar_ahf_to_buffer allows the aggregation or interpolation of data on the anthropogenic heat flux needed by TERRA_URB to the target grid.

For the aggregation of the AHF the namelist namelist.py is simple again. It contains the type of AHF (2.5min (1) or 30sec (2)) the path and the filenames of the raw data sets, as well as the names of the buffer. No other parameters can be set. Note that the underlying processing does not differ between different types of AHF

The remapping to the target grid uses the bilinear interpolation. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_6","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_ahf), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_AHF

  • data input: AHF_2006_2.5min_lonlat.nc (ahf_type=1),AHF_2006_NOAA_30sec_lonlat.nc (ahf_type=2)

  • Output: buffer file with AHF data (input_ahf: ahf_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_edgar_to_buffer","title":"extpar_edgar_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_edgar_to_buffer","title":"Short description of the subprogram extpar_edgar_to_buffer","text":"

The executable extpar_edgar_to_buffer allows the interpolation of global emission data for black carbon, organic carbon and sulfur dioxide needed for the 2D-Aerosol in ICON to the target grid.

The namelist contains only the path to the raw data, the raw data file names and the name of the buffer file.

The remapping to the target grid uses the first order conservative interpolation. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_7","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_edgar), INPUT_grid_org, INPUT_ICON_GRID

  • generate namelist: INPUT_edgar

  • data input: v8.1_FT2022_AP_NH3_2022_TOTALS_flx.nc, v8.1_FT2022_AP_OC_2022_TOTALS_flx.nc, v8.1_FT2022_AP_BC_2022_TOTALS_flx.nc, v8.1_FT2022_AP_NOx_2022_TOTALS_flx.nc, v8.1_FT2022_AP_SO2_2022_TOTALS_flx.nc

  • Output: buffer file with EDGAR data (input_edgar: edgar_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_cdnc_to_buffer","title":"extpar_cdnc_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_cdnc_to_buffer","title":"Short description of the subprogram extpar_cdnc_to_buffer","text":"

The executable extpar_cdnc_to_buffer allows the interpolation of climatology data for cloud droplet number needed for the Cloud-Aerosol in ICON to the target grid.

The namelist contains only the path to the raw data, the raw data file names and the name of the buffer file.

The remapping to the target grid uses the first order conservative interpolation. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_8","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_cdnc), INPUT_grid_org, INPUT_ICON_GRID

  • generate namelist: INPUT_cdnc

  • data input: cdnc_climatology_Q06.nc

  • Output: buffer file with cloud droplet number data (input_cdnc: cdnc_buffer_file)

  1. https://svn-ccsm-inputdata.cgd.ucar.edu/trunk/inputdata/lnd/clm2/rawdata/mksrf_soilcol.081008.nc

    Lawrence, P. J. and T. N. Chase (2007). \"Representing a new MODIS consistent land surface in the Community Land Model (CLM 3.0).\" Journal of Geophysical Research-Biogeosciences 112(G1).\\ Table 3.3 in: Oleson, K.W., D.M. Lawrence, G.B. Bonan, M.G. Flanner, E. Kluzek, P.J. Lawrence, S. Levis, S.C. Swenson, P.E. Thornton, A. Dai, M. Decker, R. Dickinson, J. Feddema, C.L. Heald, F. Hoffman, J.-F. Lamarque, N. Mahowald, G.-Y. Niu, T. Qian, J. Randerson, S. Running, K. Sakaguchi, A. Slater, R. Stockli, A. Wang, Z.-L. Yang, Xi. Zeng, and Xu. Zeng, 2010: Technical Description of version 4.0 of the Community Land Model (CLM). NCAR Technical Note NCAR/TN-478+STR, National Center for Atmospheric Research, Boulder, CO, 257 pp.\u00a0\u21a9

"},{"location":"user_manual/user_manual_05_current_limitations/","title":"Current Limitations","text":"

The EXTPAR software is subject to several limitations:

  • The ASTER domain can only be used from 60\u00b0N to 60\u00b0S. Be aware that an additional border of several gridpoints is needed if the topographically corrected parameters are desired. If the ASTER domain is exceeded a warning message is printed and the program extpar_topo_to_buffer is aborted.

  • The ASTER data shows some deficits, which are listed below:

    • Beyond 60 degrees north and south, the ASTER raw data set features several areas where no value is available e.g., over Finland (private communication with HIRLAM).

    • Some bogus regions may appear in complex topography. One of these regions is located near Grindelwald in Switzerland.

    • The ASTER data are subject to artefacts of the satellite fly-over bands. Discontinuities can be spotted at the borders of such bands. In high latitudes these bands are better visible than in the low latitudes.

    • As the correction of these deficits are time consuming no effort has been expended to remove these.

    • The ASTER data might be subject to a shift of a half gridpoint (15 meters) in both directions.

  • There is no 3 km filtered ASTER or MERIT/REMA data set to derive the subgrid scale orography (SSO) parameters and the roughness length (z0) for ASTER.

  • The HWSD raw data is in a test phase. Furthermore a new version of Int2lm and TERRA is needed to make use of these data sets.

  • The subsoil can only be used if the HWSD data is used for the topsoil. If the FAO and the HWSD data are combined a warning message is printed and the ldeep_soil parameter is set to .FALSE..

  • The special points are only tested for the COSMO grid. Also it is not possible to use these corrections if the soil raw data set is HWSD.

  • Array-caching in the consistency_check is only supported for GCC compiler.

  • CAMS aersosl data iaot_type = 5 is only supported for Intel compiler.

"},{"location":"user_manual/user_manual_06_namelist_input/","title":"Namelist Input","text":"

EXTPAR uses 3 types of namelists in order to determine in which way data is processed.

  • Fortran namelists (INPUT_)
  • Python dictionaries (input_in namelist.py)
  • Fortran namelists written by Python scripts

Whereas for the Fortran namelists and the Python dictionaries the user can specify parameters and filenames, the Fortran namelists generated during runtime by the Python scripts do not allow any user interaction.

"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_namelist_files","title":"Namelist files","text":"Namelist file Purpose Made by script Used by program INPUT_grid_org define target grid type runscript extpar_consistency_check, extpar_aot_to_buffer, extpar_landuse_to_buffer, extpar_topo_to_buffer, extpar_cru_to_buffer, extpar_ndvi_to_buffer, extpar_soil_to_buffer, extpar_flake_to_buffer, extpar_isa_to_buffer, extpar_ahf_to_buffer, extpar_emiss_to_buffer, extpar_hwsdART_to_buffer INPUT_COSMO_GRID define target domain for COSMO grid runscript extpar_consistency_check, extpar_aot_to_buffer, extpar_landuse_to_buffer, extpar_topo_to_buffer, extpar_cru_to_buffer, extpar_ndvi_to_buffer, extpar_soil_to_buffer, extpar_flake_to_buffer, extpar_isa_to_buffer, extpar_ahf_to_buffer, extpar_emiss_to_buffer, extpar_hwsdART_to_buffer INPUT_ICON_GRID define target domain for ICON grid runscript extpar_consistency_check, extpar_aot_to_buffer, extpar_landuse_to_buffer, extpar_topo_to_buffer, extpar_cru_to_buffer, extpar_ndvi_to_buffer, extpar_soil_to_buffer, extpar_flake_to_buffer, extpar_isa_to_buffer, extpar_ahf_to_buffer, extpar_emiss_to_buffer INPUT_ORO settings for orography data runscript extpar_topo_to_buffer INPUT_OROSMOOTH settings for orography smoothing runscript extpar_topo_to_buffer INPUT_RADTOPO settings for generating topographical shading fields runscript extpar_topo_to_buffer INPUT_SCALE_SEP settings to control scale separation for SSO an Z0 calculation runscript extpar_topo_to_buffer INPUT_LU settings for landuse data runscript extpar_landuse_to_buffer INPUT_AOT settings for aerosol data runscript extpar_aot_to_buffer INPUT_TCLIM settings for temperature data extpar_cru_to_buffer extpar_consistency_check INPUT_NDVI settings for NDVI data extpar_ndvi_to_buffer extpar_consistency_check INPUT_SOIL settings for soil data runscript extpar_soil_to_buffer INPUT_FLAKE settings for lake data runscript extpar_flake_to_buffer INPUT_ALB settings for albedo data extpar_albedo_to_buffer extpar_consistency_check INPUT_ISA settings for fraction of impervious surface area data extpar_isa_to_buffer extpar_consistency_check INPUT_AHF settings for anthropogenic heat flux data extpar_ahf_to_buffer extpar_consistency_check INPUT_EMISS settings for emissivity data extpar_emiss_to_buffer extpar_consistency_check INPUT_hwsdART settings for HWSD USDA data extpar_hwsdART_to_buffer INPUT_edgar settings for EDGAR data extpar_edgar_to_buffer extpar_consistency_check INPUT_CDNC settings for cdnc data extpar_cdnc_to_buffer extpar_consistency_check INPUT_ERA settings for ERA data extpar_era_to_buffer extpar_consistency_check INPUT_CHECK settings for the consistency check runscript extpar_consistency_check"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_grid_def","title":"Grid Definition","text":"

The specification of the model type (COSMO or ICON) is done in the namelist file INPUT_grid_org, the detailed target grid description for the model domain has to be provided in the namelists files INPUT_COSMO_GRID or INPUT_ICON_GRID.

"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_grid_def_general","title":"General","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-grid_def-input_grid_org","title":"NAMELIST /grid_def/ (INPUT_grid_org)","text":"

The namelist /grid_def/ defines the target grid type and the filenames with the namelists of the detailed target grid definition.

Parameter Type Default Unit Description igrid_type integer target grid type, 1 for ICON, 2 for COSMO domain_def_namelist character namelist file with domain definition domain_refinement character namelist file with domain refinement definition (e.g. for the ICON grid)"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_grid_def_icon","title":"ICON","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-icon_grid_info-input_icon_grid","title":"NAMELIST /icon_grid_info/ (INPUT_ICON_GRID)","text":"

The namelist /icon_grid_info/ specifies the filenames and the directory of the Icon grid files with the coordinates of the Icon grid.

Parameter Type Default Unit Description icon_grid_dir character path to directory which contains the ICON grid file with the coordinates icon_grid_nc_file character (max_dom) filename of the ICON grid file with the coordinates"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_grid_def_cosmo","title":"COSMO","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-lmgrid-input_cosmo_grid","title":"NAMELIST /lmgrid/ (INPUT_COSMO_GRID)","text":"

The COSMO grid is defined by a rotated latlon-grid.

Parameter Type Default Unit Description pollon real -170. deg longitude of the rotated north pole (in degrees, \\(E>0\\)) pollat real 32.5 deg latitude of the rotated north pole (in degrees, \\(N>0\\)) polgam real 0. deg longitude (in the rotated system) of the geographical north pole dlon real 0.08 deg grid point distance in zonal direction (in degrees) dlat real 0.08 deg grid point distance in meridional direction (in degrees) startlon_tot real -1.252 deg transformed longitude of the lower left grid point of the total domain (in degrees, \\(E>0\\)) startlat_tot real -7.972 deg transformed latitude of the lower left grid point of the total domain (in degrees, \\(N>0\\)) ie_tot integer 51 number of grid points in zonal direction je_tot integer 51 number of grid points in meridional direction ke_tot integer 0 number of grid points in vertical direction"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_orography","title":"Orography","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-oro_runcontrol-input_oro","title":"NAMELIST /oro_runcontrol/ (INPUT_ORO)","text":"Parameter Type Default Unit Description lcompute_sgsl logical .false. switch to activate subgrid-slope calculation"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-orography_raw_data-input_oro","title":"NAMELIST /orography_raw_data/ (INPUT_ORO)","text":"Parameter Type Default Unit Description itopo_type integer switch to choose an orography raw data set; 1 GLOBE, 2 ASTER, 3 MERIT/REMA lsso_param logical switch to choose if SSO parameters should be generated or not raw_data_orography_path character path to orography raw data ntiles_column integer GLOBE: 4 ASTER, MERIT/REMA: x number of tile columns of desired region ntiles_row integer GLOBE: 4 ASTER, MERIT/REMA: x number of tile rows of desired region topo_files character filenames of GLOBE (16 tiles) / ASTER (240 tiles)/ MERIT/REMA (72 tiles) raw data sets lsubtract_mean_slope logical .FALSE. for operational NWP-ICON treatment of mean slope in computation of SSO parameters for ICON"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-orography_io_extpar-input_oro","title":"NAMELIST /orography_io_extpar/ (INPUT_ORO)","text":"Parameter Type Default Unit Description orography_buffer_file character name for orography buffer file orography_output_file character name for orography output file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-sgsl_io_extpar-input_oro","title":"NAMELIST /sgsl_io_extpar/ (INPUT_ORO)","text":"Parameter Type Default Unit Description lpreproc_oro logical .false. read S_ORO from existing NetCDF (.false.) or preprocess from raw topography datasets (.true.) sgsl_files character filenames of raw data tiles to be used S_ORO_A10 to S_ORO_P10 (GLOBE) or S_ORO_T001 to S_ORO_T240"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-orography_smoothing-input_orosmooth","title":"NAMELIST /orography_smoothing/ (INPUT_OROSMOOTH)","text":"Parameter Type Default Unit Description lfilter_oro logical FALSE Cosmo-only: switch for orogaphy smoothing ilow_pass_oro integer 0 type of orogaphy smoothing and stencil width numfilt_oro integer 1 number of filter applications eps_filter real 10 smoothing parameter (\"strength\" of the filtering) ifill_valley integer 1 fill valleys before or after oro smoothing (1: before, 2: after) rfill_valley real 0 m mask for valley filling (threshold value) ilow_pass_xso integer 1 type of orogaphy eXtra SmOothing and stencil width (for steep orography) numfilt_xso integer 1 number of applications of the eXtra filter lxso_first logical FALSE eXtra SmOothing before or after orography smoothing (TRUE/FALSE) rxso_mask real 0 m mask for eXtra SmOothing (threshold value)"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-radtopo-input_radtopo","title":"NAMELIST /radtopo/ (INPUT_RADTOPO)","text":"Parameter Type Default Unit Description lradtopo logical Switch for radiation corrected topography parameters. Not recommended to use if orographical smoothing is false and smoothing is performed in Int2lm later, because of resulting inconsistencies. nhori integer 24 Number of horizon angles radius integer 40000 m Icon-only: Radial distance considered for computation of horizon min_circ_cov integer 1 - Icon-only: Number of gridcells to be skipped at circumference of circle. A value of 1 considers all points, whereas a value of 5 only consider every fifth point at the circumference. Note that the effect of this switch is dependent on the resolution of the grid as well on the radius choosen. max_missing real 0.9 - Icon-only: Upper limit for fraction of missingness for the horizon parameter. Grid-cells with values above will be set to 0. itype_scaling integer 2 - Icon-only: Power of the caling factor SIN(horizon-angle) applied to the geometric skyview factor to account for the anisotropic nature of longwave radiation."},{"location":"user_manual/user_manual_06_namelist_input/#namelist-scale_separated_raw_data-input_scale_sep","title":"NAMELIST /scale_separated_raw_data/ (INPUT_SCALE_SEP)","text":"Parameter Type Default Unit Description lscale_separation logical Switch for scale separation. It can only be used in combination with GLOBE as raw data set. raw_data_scale_sep_path character path to 3 km filtered topography scale_sep_files character filename of 3 km filtered topography"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_lu","title":"Land Use Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-lu_raw_data-input_lu","title":"NAMELIST /lu_raw_data/ (INPUT_LU)","text":"Parameter Type Default Unit Description raw_data_lu_path character path to land use data raw_data_lu_filename character filename of land use raw data i_landuse_data integer switch to choose a land use raw data set: 1 Globcover2009, 2 GLC2000, 3 GLCC, 5 ESA CCI-LC, 6 Ecoclimap-SG l_use_corine logical .false. switch to use Corine land use dataset; only possible if i_landuse_data = 1 ilookup_table_lu integer switch to choose a lookup table: - GLC2000 and GLCC: 1: operational settings of GME (Ritter, 2007) 2: operational settings of COSMO (Heise, 2005) 3: experimental setting, analogous to lookup tables of ECOCLIMAP (Asensio 2010) - GLOBCOVER 2009: 1: operational settings (Asensio, 2011) 2: experimental settings, analogous to lookup tables of ECOCLIMAP (Asensio 2010) - ESA CCI-LC: 1: experimental settings (Helmert, 2019) - Ecoclimap-SG: 1: Globcover analogue with added LCZs from Oke ntiles_globcover integer 6 number of tiles for GLOBCOVER data ncolumn_tiles integer number of columns in tile matrix l_terra_urb logical .false. switch to use TERRA-URB (see TERRA-URB); only possible if i_landuse_data = 6"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-glcc_raw_data-input_lu","title":"NAMELIST /glcc_raw_data/ (INPUT_LU)","text":"Parameter Type Default Unit Description raw_data_glcc_path character path to GLCC data raw_data_glcc_filename character filename of GLCC raw data ilookup_table_glcc integer switch to choose a lookup table: 1: operational settings of GME (Ritter, 2007) 2: operational settings of COSMO (Heise, 2005) 3: experimental setting, analogous to lookup tables of ECOCLIMAP (Asensio 2010)"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-glcc_io_extpar-input_lu","title":"NAMELIST /glcc_io_extpar/ (INPUT_LU)","text":"Parameter Type Default Unit Description glcc_buffer_file character name for GLCC buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_aot","title":"Aerosol Optical Depth","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-aerosol_raw_data-input_aot","title":"NAMELIST /aerosol_raw_data/ (INPUT_AOT)","text":"Parameter Type Default Unit Description raw_data_aot_path character path to aerosol raw data raw_data_aot_filename character filename of aerosol raw data iaot_type integer 1 index to specify AOD raw data set: 1:Tegen, 2:AeroCom, 3:MACC-II, 4:MACv2, 5:CAMS"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-aerosol_io_extpar-input_aot","title":"NAMELIST /aerosol_io_extpar/ (INPUT_AOT)","text":"Parameter Type Default Unit Description aot_buffer_file character name for aerosol buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_cru","title":"Climatological 2m Temperature","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_tclim-namelistpy","title":"DICT input_tclim (namelist.py)","text":"Parameter Type Default Unit Description raw_data_t_clim_path character path to T2m climatology data raw_data_t_clim_coarse character filename of coarse T2m climatology data raw_data_t_clim_fine character filename of fine T2m climatology data it_cl_type integer switch to choose between the new and fine (1) and the old and coarse over sea and the fine over land (2) raw data set. Note that the fine data set (1) is topographically corrected. t_clim_buffer_file character name for T_clim buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#ndvi-data","title":"NDVI Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_ndvi-namelistpy","title":"DICT input_ndvi (namelist.py)","text":"Parameter Type Default Unit Description raw_data_ndvi_path character Path to NDVI raw data raw_data_ndvi_filename character Filename of NDVI raw data ndvi_buffer_file character Name for NDVI buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#edgar-data","title":"EDGAR Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_edgar-namelistpy","title":"DICT input_edgar (namelist.py)","text":"Parameter Type Default Unit Description raw_data_edgar_path character Path to EDGAR raw data raw_data_edgar_filename_bc character Filename of EDGAR black carbon raw data raw_data_edgar_filename_oc character Filename of EDGAR organic carbon raw data raw_data_edgar_filename_so2 character Filename of EDGAR sulfur dioxide raw data raw_data_edgar_filename_nh3 character Filename of EDGAR ammonia raw data raw_data_edgar_filename_nox character Filename of EDGAR nitrogen oxides raw data"},{"location":"user_manual/user_manual_06_namelist_input/#cdnc-data","title":"CDNC Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_cdnc-namelistpy","title":"DICT input_cdnc (namelist.py)","text":"Parameter Type Default Unit Description raw_data_cdnc_path character Path to CDNC raw data raw_data_cdnc_filename character Filename of CDNC raw data"},{"location":"user_manual/user_manual_06_namelist_input/#hwsdart-data","title":"hwsdART Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-hwsdart_nml-input_hwsdart","title":"NAMELIST /hwsdART_nml/ (INPUT_hwsdART)","text":"Parameter Type Default Unit Description raw_data_hwsdART_path character Path to hwsdART raw data raw_data_hwsdART_filename character Filename of hwsdART raw data hwsdART_output_file character Name for hwsdART output file"},{"location":"user_manual/user_manual_06_namelist_input/#soil-data","title":"Soil Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-soil_raw_data-input_soil","title":"NAMELIST /soil_raw_data/ (INPUT_SOIL)","text":"Parameter Type Default Unit Description isoil_data integer Switch to choose between raw soil data, 1: FAO, 2: HWSD, 3: HWSD with terra mapping ldeep_soil logical Switch for deep soil, set to .TRUE. if using HWSD data raw_data_soil_path character Path to soil raw data raw_data_soil_filename character Filename of soil raw data raw_data_deep_soil_filename character Filename of deep soil raw data"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-soil_io_extpar-input_soil","title":"NAMELIST /soil_io_extpar/ (INPUT_SOIL)","text":"Parameter Type Default Unit Description soil_buffer_file character Name for soil buffer file soil_buffer_file_consistent character Name for soil buffer file after consistency check soil_output_file_consistent character Name for soil output file after consistency check"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-hwsd_index_files-input_soil","title":"NAMELIST /HWSD_index_files/ (INPUT_SOIL)","text":"Parameter Type Default Unit Description path_HWSD_index_files character Path to HWSD lookup tables lookup_table_HWSD character Lookup table to convert soil type index from global to TERRA soil type HWSD_data character Lookup table for sand, silt, clay, organic carbon, and bulk density (topsoil) HWSD_data_deep character Lookup table for sand, silt, clay, organic carbon, and bulk density (subsoil) HWSD_data_extpar character Parameter for development purposes"},{"location":"user_manual/user_manual_06_namelist_input/#freshwater-lake-data","title":"Freshwater Lake Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-flake_raw_data-input_flake","title":"NAMELIST /flake_raw_data/ (INPUT_FLAKE)","text":"Parameter Type Default Unit Description raw_data_flake_path character Path to flake raw data raw_data_flake_filename character Filename of flake raw data"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-flake_io_extpar-input_flake","title":"NAMELIST /flake_io_extpar/ (INPUT_FLAKE)","text":"Parameter Type Default Unit Description flake_buffer_file character Name for flake buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#albedo-data","title":"Albedo Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_alb-namelistpy","title":"DICT input_alb (namelist.py)","text":"Parameter Type Default Unit Description raw_data_alb_path character Path to raw albedo data raw_data_alb_filename character Filename of raw albedo data raw_data_alnid_filename character Filename of raw NIR-albedo data raw_data_aluvd_filename character Filename of raw UV-albedo data ialb_type integer Switch to indicate albedo type: 1: total albedo, 2: soil albedo, 3: as 1 without NI and UV fields alb_buffer_file character Name for albedo buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_isa","title":"ISA Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_isa-namelistpy","title":"DICT input_isa (namelist.py)","text":"Parameter Type Default Unit Description raw_data_isa_path character path to ISA raw data raw_data_isa_filename character filename of ISA raw data isa_type integer type of used ISA data source isa_buffer_file character name for ISA buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_ahf","title":"AHF Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_ahf-namelistpy","title":"DICT input_ahf (namelist.py)","text":"Parameter Type Default Unit Description raw_data_ahf_path character path to AHF raw data raw_data_ahf_filename character filename of AHF raw data iahf_type integer type of used AHF data source ahf_buffer_file character name for AHF buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_emissivity","title":"Emissivity Parameter","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_emiss-namelistpy","title":"DICT input_emiss (namelist.py)","text":"Parameter Type Default Unit Description iemiss_type integer switch to choose between full-range (1) and long-wave (2) emissivity data raw_data_emiss_path character path to emissivity parameter raw data raw_data_emiss_filename character filenames of emissivity raw data emiss_buffer_file character name for emissivity parameter buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_era","title":"ERA Parameter","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_era-namelistpy","title":"DICT input_era (namelist.py)","text":"Parameter Type Default Unit Description iera_type integer type of ERA climatology: ERA5 (1) and ERA-I (2) raw_data_era_path character path to ERA raw data raw_data_era_ORO character filenames of ERA ORO raw data raw_data_era_SD character filenames of ERA SD raw data raw_data_era_T2M character filenames of ERA T2M raw data raw_data_era_SST character filenames of ERA SST raw data era_buffer_file character name for ERA parameter buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_consistency_check","title":"Consistency Check","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-extpar_consistency_check_io-input_check","title":"NAMELIST /extpar_consistency_check_io/ (INPUT_CHECK)","text":"Parameter Type Default Unit Description l_use_array_cache flag F flag indicating whether mmap-caching is used (reduces memory consumption but increases runtime) netcdf_output_filename character filename for NetCDF output i_lsm_data integer integer switch to choose if an external land-sea mask is desired (0: no, 1: use external land-sea mask) land_sea_mask_file character name of the file used as the external land-sea mask number_special_points integer number of points that should be treated specially (max value: 3, choose 0 if not needed) lwrite_netcdf logical T flag indicating whether NetCDF output for COSMO grid is desired tile_mode integer 0 if activated (tile_mode=1), process output for ICON tile structure lflake_correction logical T if activated, fr_lake values of grid points next to the ocean are set to ocean values, and the lake depth value is set to undefined (default in EXTPAR version 4.0, but not in DWD EXTPAR version 2.10)"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-special_points-input_sp_1","title":"NAMELIST /special_points/ (INPUT_SP_1)","text":"

Modifications for Falkenberg.

Parameter Type Default Unit Description lon_geo_sp real 14.115 deg east longitude coordinate of the special point lat_geo_sp real 52.156 deg north latitude coordinate of the special point soiltype_sp real 3.0 - soil type of the special point z0_sp real 0.03 m roughness length of the special point rootdp_sp real 0.6 m rooting depth of the special point plcovmn_sp real 0.55 1 plant cover minimum of the special point plcovmx_sp real 0.8 1 plant cover maximum of the special point laimn_sp real 0.5 1 leaf area index minimum of the special point laimx_sp real 2.5 1 leaf area index maximum of the special point for_d_sp real 1 ground fraction covered by deciduous forest at the special point for_e_sp real 1 ground fraction covered by evergreen forest at the special point fr_land_sp real 1 fraction land cover of the special point"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-special_points-input_sp_2","title":"NAMELIST /special_points/ (INPUT_SP_2)","text":"

Modifications for Waldstation.

Parameter Type Default Unit Description lon_geo_sp real 13.954 deg east longitude coordinate of the special point lat_geo_sp real 52.186 deg north latitude coordinate of the special point soiltype_sp real 3.0 - soil type of the special point z0_sp real 0.78 m roughness length of the special point rootdp_sp real 0.6 m rooting depth of the special point plcovmn_sp real 0.79 1 plant cover minimum of the special point plcovmx_sp real 0.81 1 plant cover maximum of the special point laimn_sp real 3.0 1 leaf area index minimum of the special point laimx_sp real 4.0 1 leaf area index maximum of the special point for_d_sp real 1 ground fraction covered by deciduous forest at the special point for_e_sp real 1 ground fraction covered by evergreen forest at the special point fr_land_sp real 1 fraction land cover of the special point"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#general-information","title":"General Information","text":"

EXTPAR (External Parameters for Numerical Weather Prediction and Climate Application) is an official software of the COSMO Consortium . It is used to prepare the external parameter data files that are used as input for the COSMO and the ICON model.

The code is written in Fortran 90 and in Python. The Python scripts use CDO (Climate Data Operators) for the most compute-intensive parts. The code is also accelerated in some places with OpenMP parallelization.

Once compiled, the code generates 6 Fortran executables and 9 Python scripts, which can be run simultaneously except for the final extpar_consistency_check.exe, which is used to tie together all the external parameter results into one output file.

Information about the latest changes can be found in the Release Notes on GitHub .

The technical and scientific documentation can be found in the User and Implementation Guide.

"},{"location":"#quick-start","title":"Quick Start","text":""},{"location":"#container","title":"Container","text":"

The easiest way to use EXTPAR is through the container provided with Dockerfile . A ready-to-use image can be downloaded from C2SM docker hub or even simpler via CLI:

docker pull c2sm/extpar:tagname\n

Alternatively, an image is provided as an asset of each release

"},{"location":"#wrapextpar","title":"WrapExtpar","text":"

The image provides a wrapper that only requires to set basic options, all other details are handled by the wrapper.

The wrapper needs two different kinds of input:

1. EXTPAR settings as JSON, see official docs

{\n  \"extpar\": {\n    \"igrid_type\": 1,\n    \"iaot_type\": 1,\n    \"ilu_type\": 1,\n    \"ialb_type\": 1,\n    \"isoil_type\": 1,\n    \"itopo_type\": 1,\n    \"lsgls\": false,\n    \"lfilter_oro\": false,\n    \"lurban\": false\n  }\n}\n

2. Execution options

  --input-grid INPUT_GRID\n                        COSMO: Fortran Namelist \"INPUT_COSMO_GRID\", ICON: Icon\n                        grid file\n  --raw-data-path RAW_DATA_PATH\n                        Path to folder \"linked_data\" of exptar-input-data\n                        repository\n  --run-dir RUN_DIR     Folder for running EXTPAR\n  --account ACCOUNT     Account for slurm job\n  --host HOST           Host\n  --no-batch-job        Run jobscript not as batch job\n

An example call could look like

docker run -v /c2sm-data/extpar-input-data:/data \\\n           -v /icon-grids:/grid \\\n           -v /my_local_dir:/work \\\n           extpar \\ \n           python3 -m extpar.WrapExtpar \\\n           --run-dir /work \\\n           --raw-data-path /data/linked_data \\\n           --account none \\\n           --no-batch-job \\\n           --host docker \\\n           --input-grid /grid/icon_grid.nc \\\n           --extpar-config /work/config.json\n

Below is a more detailed explanation about the mounted volumes:

  • -v /c2sm-data/extpar-input-data:/data: Mounts the input data at /data inside the container. This should be aligned with the --raw-data-path argument.
  • -v /icon-grids:/grid: Mounts a local folder with icon grids under /grid inside the container. This should be aligned with the --input-grid argument.
  • -v /my_local_dir:/work: Mounts a local folder for EXTPAR output at /work inside the container. This should be aligned with the --run-dir argument.
"},{"location":"#individual-executables","title":"Individual Executables","text":"

For those who require a more custom setup of EXTPAR or need settings that are not possible to specify through the wrapper, you can run each executable within the image too. For example:

docker run extpar bash -c \"extpar_topo_to_buffer\"\n
"},{"location":"#bare-metal-build-on-levante","title":"Bare Metal Build on Levante","text":"

The installation steps are

git clone --recursive git@github.com:C2SM/extpar.git\ncd extpar\ngit submodule update\n./configure.levante.gcc\nsource modules.env\nmake -j 4\n

Furthermore copy all the .exe and .py files from bin to the directory in which the namelist and all required input-data is present.

You do then have two choices to run EXTPAR:

  1. configure the PYTHONPATH variable such that it includes to the python/lib folder of the source repository
  2. build and install a python package for your user account
"},{"location":"#installing-extpar","title":"Installing EXTPAR","text":"

After you prepared EXTPAR (see above), you have two options to install and run the software.

"},{"location":"#option-1-pythonpath","title":"Option 1: PYTHONPATH","text":"

If you like to run the EXTPAR scripts without installing a package, make sure to have the python/lib folder in your PYTHONPATH variable. You can do this via

export PYTHONPATH=$PYTHONPATH:$(pwd)/python/lib\n

Afterwards you can cd into the bin/ directory and run the corresponding executables, e.g.

cd bin\n./extpar_aot_to_buffer.exe\n

For more detailed compilation instructions see: compile_run

"},{"location":"#option-2-build-and-install-a-python-package","title":"Option 2: Build and install a python package","text":"

Alternatively you can build a python package and install it to your libraries. This has the advantages that the executables can be ran from anywhere in the system without the need to copy the executables themselves.

To build the package, now run

python setup.py sdist\n

You can then install it via

pip install dist/extpar-*.tar.gz\n

Note

If you do not have the permissions to install it into the system-wide python library, it will be installed for your user account only (you can also add the --user flag to pip to force this behaviour).

If you did not install extpar into the system libraries, make sure that the bin folder of your local user is on your PATH variable to be able to run the EXTPAR scripts. This is usually done via

export PATH=\"$HOME/.local/bin:$PATH\"\n

You can then call the functionalities of WrapExtpar.py via

python -m extpar.WrapExtpar\n

or import the script in Python via

from extpar.WrapExtpar import generate_external_parameters\n

Or you call the executable scripts in your run directory, e.g.

extpar_aot_to_buffer.exe\n
"},{"location":"#input-data","title":"Input Data","text":""},{"location":"#data-location","title":"Data Location","text":"

In order to run EXTPAR, input data files for the external parameter variables are needed. The data is provided on all supported machines:

Levante (DKRZ)co2 (ETHZ)
/work/pd1167/extpar-input-data/linked_data\n
/c2sm-data/extpar-input-data\n

The input data files are also stored in a git-LFS data repository found at: https://gitlab.dkrz.de/extpar-data/extpar-input-data . Instructions to download or update the input data files can be found in this repository. To gain access to the git-LFS input data repository, contact the EXTPAR source code administrator.

"},{"location":"#testing","title":"Testing","text":"

The EXTPAR code comes with a technical testsuite to ensure the accuracy of the results. Weekly tests run for compilers:

  • GCC

For more information about how the testsuite can be run or new test added see testsuite-documentation

"},{"location":"#information-for-developers","title":"Information for Developers","text":"

In case you want to contribute to EXTPAR please have a look at our coding rules and development workflow.

"},{"location":"#support","title":"Support","text":"

In the case of issues or questions, please create an issue on GitHub .

"},{"location":"SUMMARY/","title":"SUMMARY","text":"
  • Home
  • Compile and Run
  • Dependencies
  • Testing
  • Development
  • Release Notes
  • User Guide
"},{"location":"compile_run/","title":"Compile and Run","text":""},{"location":"compile_run/#compilation","title":"Compilation","text":"

Since Version 5.4, EXTPAR is built with an autotools based build-system. This has been necessary to accomodate for the additional C source code files and newly required libraries.

There are three options to compile Extpar:

"},{"location":"compile_run/#in-source-build","title":"In-source build","text":"
./configure.<hostname>.<compiler>\nsource modules.env  \nmake   \n
"},{"location":"compile_run/#out-of-source-build","title":"Out-of-source build","text":"
mkdir build-<my_self_defined_note>\ncd build-<my_self_defined_note>\npath/to/extpar/installation/configure.<hostname>.<compiler>\nsource modules.env  \nmake  \n
"},{"location":"compile_run/#install-binaries-only-in-external-directory","title":"Install binaries only in external directory","text":"
./configure.<hostname>.<compiler> --prefix=<my_external_directory>\nsource modules.env  \nmake install  \n

The binaries will be installed in my_external_directory/bin.

"},{"location":"compile_run/#restart-build-from-scratch","title":"Restart build from scratch","text":"
make distclean \n
"},{"location":"compile_run/#configure-for-new-machines","title":"Configure for new machines","text":"

The first step in creating a new machine setup is to take one of the existing configure wrapper scripts and adapt it to your local environment. The scripts are called configure.<hostname>.<compiler>.

"},{"location":"compile_run/#running","title":"Running","text":"

The Fortran executables

  • extpar_aot_to_buffer.exe
  • extpar_landuse_to_buffer.exe
  • exptar_soil_to_buffer.exe
  • extpar_topo_to_buffer.exe
  • extpar_flake_to_buffer.exe
  • extpar_consistency_check.exe

can simply be copied to the run/ directory.

The main python scripts

  • extpar_alb_to_buffer.py
  • extpar_cru_to_buffer.py
  • extpar_ndvi_to_buffer.py
  • extpar_emiss_to_buffer.py
  • exptar_era_to_buffer.py
  • extpar_ahf_to_buffer.py
  • extpar_isa_to_buffer.py
  • extpar_cdnc_to_buffer.py
  • extpar_edgar_to_buffer.py

can be treated like the Fortran binaries and copied to the run/ directory. Make sure the namelist.py is also present in the run/ directory.

All self-written Python modules are stored in python/lib and do not need to be copied to the respective run directory, but the environment variable PYTHONPATH needs to be set to the following:

export PYTHONPATH=$PYTHONPATH:<absolute_path_to_python>/lib\n

Some runscript examples are available under run_scripts . Just adapt them to your needs!

"},{"location":"dependencies/","title":"Dependencies","text":"

EXTPAR contains Fortran Code as well as hybrid Python-CDO scripts. Both code bases need external libraries and installations.

"},{"location":"dependencies/#libraries","title":"Libraries","text":""},{"location":"dependencies/#fortran","title":"Fortran","text":"

EXTPAR needs the following libraries for the Fortran-Code:

  • NetCDF
  • JASPER
  • PNG
  • Z LIB
"},{"location":"dependencies/#python-cdo","title":"Python-CDO","text":"

EXTPAR needs the following Python packages and installations:

  • at least Python 3.6
  • module netCDF4

The module netCDF is the Python interface to the netCDF C library. It allows the user create and manipulate netCDF files with Python. For more detailed information please visit netCDF Python .

Additionally, an installation of CDO (Climate Data Operators) is required. All necessary information about this tool can be found at CDO-MPI.

Be sure that these libraries are installed on your system or install them yourself by following the installation instructions provided with the libraries.

"},{"location":"dependencies/#on-the-dkrz-machine-levante","title":"On the DKRZ machine Levante","text":"

All the required libraries are already installed on the DKRZ machine.

"},{"location":"development/","title":"Information for EXTPAR Developers","text":""},{"location":"development/#git-and-github","title":"Git and Github","text":"

The EXTPAR code is developed using the Git version control system and the Github web interface . Outstanding bugs and requested features are tracked using the Issues section of the Github repository. Additionally, automated testing of newly developed features is integrated into the Github interface using the Jenkins CI tool.

"},{"location":"development/#main-branches","title":"Main branches","text":"

The master branch is protected and only the core development team is allowed to modify the master branch. All tags and releases are based on this branch.

"},{"location":"development/#supporting-branches","title":"Supporting branches","text":"

Any new code development should be done in a topic branch. Topic branches are merged back into master by opening a pull request. Code must be peer reviewed by the source code administrator.

Supporting branches are removed once successfully merged in the master branch.

"},{"location":"development/#developments-with-new-input-data-sets","title":"Developments with new input data sets","text":"

Any new EXTPAR code that is accompanied by a new input data file or files should be added with a simultaneous pull request in both this code repository (for the code changes) and in the extpar-input-data repository (for the addition of the input data files). The topic branch for both pull requests should have the same name, in order to enable the synchronization of the code and input-data repositories.

"},{"location":"development/#testing-new-developments","title":"Testing new developments","text":"

Once a developer has finished developing a new feature or bug fix, they should make a pull request on the Github repository from their topic branch into the master-branch. Then, they should write the following comment into the pull request conversation:

launch jenkins\n

This will start the automated testing, and the code will be compiled and tested on co2 (ETH) and Levante (DKRZ).

If the tests fail, then the developer should fix the issues and resubmit the testing on Jenkins. Once all of the tests are passing, then they should notify the source code administrator that the pull request is ready for review and merging into the master-branch.

"},{"location":"development/#fortran-code","title":"Fortran Code","text":""},{"location":"development/#logging","title":"Logging","text":"

In case you want to add some additional prints in EXTPAR, please use the logger described below.

CALL the built-in logger-functions in order to print messages or variables in the specific logfile of each EXTPAR executable. The logger has three different levels of messages to print:

  1. logging%info(your_message): info-prints for better orientation during code execution, variables or other stuff.

  2. logging%warning(your_message): warnings, like wrong namelist-inputs, unsupported NetCDF versions or problems with some data points.

  3. logging%error(your_message, __FILE__,__LINE__): errors that occur during I/O, allocation, that requires an abort of EXTPAR.

As your_message needs to be a sequence of characters, use

WRITE(message_text,*)var_x, 'is now', var_y\n

and then

CALL logging%inf0(message_text) \n

to print the values of var_x and var_y to the logfile.

For quick debugging-prints ONLY use

WRITE(logging%fileunit,*)var_x, 'is now', var_y \n
"},{"location":"development/#coding-rules-and-best-practices","title":"Coding Rules and Best Practices","text":"
  1. All features available in Fortran 2008 as far as supported by Intel, GCC, and NAG are allowed.

  2. Use up to the allowed 132 character per line, but not more. Note that this includes comments.

  3. Indentation rules:

    Code feature Num. of indentation characters program indentation 2 type definition 2 do loops 2 if constructs 2 continuation 5 (with leading &) all directives 0
  4. Always use IMPLICIT NONE and PRIVATE/PUBLIC once only in modules header.

  5. Do not add USE statements after CONTAINS.

  6. Fortran keywords should be in capital letters with the exception of len, in, out, and inout.

  7. Do not use tabs, deprecated, or obsolete features.

  8. Do not overspecify declarations - especially if standard types are expected.

"},{"location":"development/#python-code","title":"Python Code","text":""},{"location":"development/#logging_1","title":"Logging","text":"

In case you want to add some additional prints in EXTPAR, please use the logger described below.

CALL the built-in logger-functions in order to print messages or variables in the specific logfile of each EXTPAR executable. The logger can print variables as well as strings. Use formatted strings (f') in case you want to combine variables and strings. The logger has 4 different levels of messages to print:

  1. logging.debug(your_message): Mean/Max/Min of variables needed for development, more detailed information about code execution.

  2. logging.info(your_message): info-prints for better orientation during code execution, variables or other stuff.

  3. logging.warning(your_message): warnings, like wrong namelist-inputs, unsupported NetCDF versions or problems with some data points.

  4. logging.error(your_message): errors that occur during I/O, allocation or wrong namelist parameters, that requires an abort of EXTPAR. The programm does not stop automatically after the call of logging.error, so a raise follows the logging.error()

Default logging level is info, so only messages from logging.info(), logging.warning() and logging.error() are written to the logfile. Adjust the level of the logger right at the beginning of each Python executable to level=logging.DEBUG to also print logging.debug().

"},{"location":"development/#coding-rules-and-best-practices_1","title":"Coding rules and best practices","text":"

The Python code needs to fulfill the Pep8 coding standard . A GitHub action automatically formats Python code for you.

"},{"location":"release_notes/","title":"Release notes","text":"

For the latest release notes, please see our GitHub webpage .

"},{"location":"release_notes/#514","title":"5.14","text":"
  • New buffer script extpar_cdnc_to_buffer for ICON
  • Cloud droplet number concentration from the cloud optical depth and effective radius
  • Input data:
    • modis_cdnc_climatology_Q06.nc
"},{"location":"release_notes/#513","title":"5.13","text":"
  • New buffer script extpar_edgar_to_buffer for ICON
  • Global emission data for black carbon, organic carbon and sulfur dioxide
  • Input data:
    • EDGARv6.1_BC_2018_TOTALS.0.1x0.1.nc
    • EDGARv6.1_OC_2018_TOTALS.0.1x0.1.nc
    • EDGARv6.1_SO2_2018_TOTALS.0.1x0.1.nc
  • Fix albodo for glacier points
  • Changes the following fields for ICON setups
    • ALB
    • ALNID
    • ALUVD
    • FOR_D
    • FOR_E
    • LAI_MX
    • PLCOV_MX
    • ROOTDP
    • SOILTYP
    • ROOTDP
    • URBAN
"},{"location":"release_notes/#512","title":"5.12","text":"
  • New landuse data set Ecoclimap Second Generation
  • Namelist switch i_landuse_data=6 in INPUT_LU
  • Set l_terra_urb=.true. in INPUT_LU to process additional urban fields
  • Corresponding input-data set is ECOCLIMAP_SG.nc
  • Assign more landuse classes (previously \"undefined\") for Corine
  • Changes the following fields
    • SOILTYP
    • FR_LAND
    • PLCOV_MX
    • LAI_MX
    • RSMIN
    • URBAN
    • FOR_D
    • FOR_E
    • SKC
    • EMIS_RAD
    • ROOTDP
    • Z0
    • NDVI_MAX
    • FR_LAKE
    • DEPTH_LK
    • AHF
    • ISA
    • NDVI
    • ALNID
    • ALUVD
    • NDVI_MRAT
    • LU_CLASS_FRACTION
    • ALB
  • New buffer script extpar_hwsdART_to_buffer
  • Standalone executable, output not processed by consistency_check
  • Namelist INPUT_hwsdART defines key parameters
  • Input data: HWSD0_USDA.nc
  • Problems with git-lfs prohibit the data to be provided on Levante
"},{"location":"release_notes/#511","title":"5.11","text":"
  • Remove ecoclimap (ilanduse=4) from extpar_landuse_to_buffer
  • Introduction of GitHub actions
  • Format code each time a .py-file is pushed to repo
  • Test if docs (.tex-file) is still buildable each time it is changed
  • Attach docs (.pdf) as artifact to each git tag
  • Remove misleading code for extpar_topo_to_buffer
  • Orographic smoothing for Icon aborts Extpar
  • Remove dead code parts in mo_agg_topo_icon
  • Installation of Extpar as Python package
  • Possibility to install all relevant executables and Python scripts as package
  • Adapt import statements in all Python files to work as a package as well
  • Detailed instructions how to install in README
  • Wrapper script for Extpar
  • Only key switches like itope_type or ialb_type need to be specified
  • Automatic generation of namelists
  • Picks the correct topographic input data tiles into INPUT_ORO
  • Runs a batched job for Daint or Levante
  • Wrapper needs same Python environment (PYTHONPATH) as Extpar
  • run WrapExtpar.py -h for more infos
  • Testsuite
  • Add new test for WrapExtpar.py on Daint and Levante
  • Python
  • Use raise instead of sys.exit(1) to abort scripts
"},{"location":"release_notes/#5101","title":"5.10.1","text":"

This is a minor release to fix cdo version on Levante * CDO-version fixed to 2.0.5 because later versions exit with non-zero exit status for cdo -V

"},{"location":"release_notes/#510","title":"5.10","text":"

This is a minor release with fixes for Levante at DKRZ, a cleanup of MCH runscripts and a bugfix for in consistency_check * CDO version change from 1.9.10 to 2.0.5 on Levante at DKRZ - Fields from Python-CDO scripts changed up to 10e-4! - Many (even large) adjustements of the tolerances in the testsuite - Result on other machines remain unchanged * Fix for array out-of-bounds with special points outside of target domain * Abort Extpar in consistency check if compiler not GCC * Cleanup and update runscripts for models run at MeteoSwiss

"},{"location":"release_notes/#591","title":"5.9.1","text":"

This is a minor release to support Levante at DKRZ and drop the support for Intel * Support GCC on Levante * Remove configure-wrappers for Mistral * Remove Intel references in testsuite

"},{"location":"release_notes/#59","title":"5.9","text":"

This is an intermediate release with OpenMP optimizations, a bugfix for topography and and some cleanup * OpenMP optimizations for domains crossing date-line in the following parts - extpar_landuse_to_buffer - extpar_topo_to_buffer * Update runscripts - ETH domain with Merit topography - EU-Cordex domain with Globe topography * Cleanup - Remove all leftovers from old build-system - Remove output for vertices - Around 10% speedup

  • Bugfix: Take last row at dateline into account
  • Last raw data row in mo_agg_topo was ignored
  • Changes the following fields (only in testcase mpim/icon_r2b4)
    • SSO_GAMMA
    • SSO_OROMAX
    • SSO_OROMIN
    • SSO_SIGMA
    • SSO_STDH
    • SSO_THETA
    • T_CL
    • Z0
"},{"location":"release_notes/#58","title":"5.8","text":"

This is an intermediate release with changes for the upgrade of Piz Daint, support for Merit topography for COSMO and a revised algorithm for SGSL processing * Daint upgrade - export PMI_NO_PREINITIALIZE=1 to avoid unwanted prints from CDO - New paths for Python virtual environment: - Daint: /project/g110/extpar/venv_daint - Tsa: /project/g110/extpar/venv_tsa * Merit for COSMO - Enable itopo_type=3 for COSMO grid - Testing performed by Christian Steger from Hymet-group at ETH-IAC * Revised algorithm for SGSL preprocessing - Infer values of boundary points for SGSL - Deactivate SGSL for ASTER due to inconsistencies. For detailed information see the PR .

"},{"location":"release_notes/#574","title":"5.7.4","text":"

This is a minor release with an adaption in the SSO-computation and replacement of ksh with bash * Revised SSO for ICON - Experiments at DWD showed an improvement of model results with different SSO-thresholds, see this wiki entry for more information. - Lowering of threshold from 10.0 to 1.0 changes the following fields - SSO_GAMMA - SSO_OROMAX - SSO_OROMIN - SSO_SIGMA - SSO_STDH - SSO_THETA - topography_c (only in testcase mpim/icon_r2b4)

  • Replace ksh with bash in runscripts to prepare for future linux-distributions
"},{"location":"release_notes/#573","title":"5.7.3","text":"

This is a minor release with two technical improvements. * Python-CDO - Automatic detection if CDO contains thread-safe HDF5 library * extpar_topo_to_buffer - Reduce memory usage for option lsubstract_mean_slope=.TRUE.

"},{"location":"release_notes/#572","title":"5.7.2","text":"

This is a minor release with an update for the Python environment on Mistral and refactored docs. * Python on Mistral - Replace anaconda3/bleeding_edge with python3/unstable * Docs - Remove outdated documentation - Make docs about testsuite and compilation more comprehensive - Quickstart for all supported machines

"},{"location":"release_notes/#571","title":"5.7.1","text":"

This is a minor release with two bugfixes, one for the build-system and one for extpar_topo_to_buffer. * Build-system: - Install Python-CDO script in bin-folder directly in Makefile - Out-of-source build include Python-CDO scripts as well * extpar_topo_to_buffer: - Abort Extpar for itopo_type = 3

"},{"location":"release_notes/#57","title":"5.7","text":"

This is an intermediate release that introduces two Python-CDO scripts, modifications for reduced memory usage for non-global grids and a bugfix for the CAMS-aersosol dataset. * extpar_isa_to_buffer - Replace Fortran code with Python-CDO - Change in results for fields - Impervous Surface Area (ISA) - Read the users guide for detailed information about details of the implementation of extpar_isa_to_buffer * exptar_ahf_to_buffer - Replace Fortran code with Python-CDO - Change in results for fields - Antropogenic Heat Flux (AHF) - Read the users guide for detailed information about details of the implementation of extpar_ahf_to_buffer * Reduce memory usage for Python-CDO - Automatic determination of the extent of the target grid - Use CDO operator -sellonlat to read subset of input data * Bugfix for CAMS dataset - Remove assertion for GCC-compiler - Fix wrong dimensions in meta-data for the ICON-grid

"},{"location":"release_notes/#56","title":"5.6","text":"

This is an intermediate release that introduces a new topography dataset and the CAMS-aerosol climatologies, OpenMP support for CSCS-machines, enhanced testing on CSCS-machines, a script to extract the input-data from namelist, progress bars for logfiles of extpar_topo_to_buffer and consistent names for all logfiles.

  • Merit/Rema topography
  • Set switch itopo_type = 3 to process Merit-Rema data
  • CAMS aerosol climatology for ICON
  • Set switch iaot_type = 5 to process CAMS-aerosol data
  • Due to an unresolved bug only available for Intel compiler
  • Testsuite
  • Remove COSMO-D2 test from testsuite
  • Enable landuse tests for all supported machines
  • All tests run on 12 OpenMP threads on Piz Daint and Tsa for COSMO and ICON
  • Introduce the script extract_inputfiles_from_namelist.py for faster data access at CSCS. It is recommended to use this skript for your own Extpar runs as well.
  • Logging
  • Progress bar (0% to 100%) for topography processing
  • Change logfile-name for extpar_consistency_check to extpar_consistency_check.log
"},{"location":"release_notes/#551","title":"5.5.1","text":"

This is a minor release that fixes the inconsistent usage of netCDF versions across Extpar and small documentation changes.

  • Bugfix netCDF versions
  • Use netCDF version passed via NETCDF_OUTPUT_FILETYPE also for ICON grids (CDI-interface)
  • Documentation changes
  • Put Jonas Jucker as source code administrator
"},{"location":"release_notes/#55","title":"5.5","text":"

This is an intermediate release that brings enhanced namelist parsing for the Python-CDO scripts, a new Python-CDO script extpar_era_to_buffer.py to replace the former way of remapping ERA-climatologies using Icontools, a more sophisticated tolerance checker to allow specific roundoff for each test and variables, support NetCDF5 and new default NetCDF 4, fixes for high-resolution grid exceeding integer value range and some minor bugfixes for Piz Daint related to HDF5. * exptar_era_to_buffer - 4 fields processed - Sea surface temperature (T_SEA) - 2m land temperature (T_2M_CLIM) - Geometric height (TOPO_CLIM) - Snow water equivalent (W_SNOW) - New namelist-parameter iera_type defines type of ERA input data used, either ERA-I or ERA-5 - extpar_consistency_check checks for namelist INPUT_ERA to determine if ERA-climatologies come from Python-CDO or Icontools - Using extpar_era_to_buffer.py changes fields, a detailed review of changes was performed by J\u00fcrgen Helmert from DWD - W_SNOW - TOPO_CLIM - T_SEA - T_2M_CLIM - Read the users guide for detailed information about how extpar_era_to_buffer is integrated into the existing workflow * Enhanced namelist parsing for Python-CDO - Line starting with ! ignored as expected from Fortran code * Bugfixes for Piz Daint - -L option for all CDO commands - Disbable HDF5 file locking due to problems reading some input data * Improved tolerance testing in testsuite - Tolerances can now be defined separate for each test and variable for example in tolerance file * Support for NetCDF 5 - NetCDF 4 replaces netCDF 3 as default - Value of environment variable NETCDF_OUTPUT_FILETYPE sets version: NETCDF3, NETCDF4 or NETCDF5 * Modified netCDF-interface functions to allow write of fields with dimesions exceeding default integer value range

"},{"location":"release_notes/#541","title":"5.4.1","text":"

This is an intermediate release that brings two lradtopo-parameters for Icon, better user feedback for the shell-commands launched in the Python-scripts, a bugfix in exptar_albedo_to_buffer.py, a configure script for O3 (ETHZ) and small technical improvements to the Code. * HORIZON and SKYVIEW fields for the Icon grid - 4 new namelist-parameter - radius -> defines the considered horizontal distance for the HORIZON field - min_circ_cov -> defines the level of detail of the search-algorithm for performance reasons - max_missing -> defines upper treshold for the allowed missingness at the boundary of the domain - itype_scaling -> choose the type of scaling for SKYVIEW to account for anisotropic behaviour of IR-radiation - Read the users guide for detailed information about the difference between the COSMO and the ICON implementation

  • Refactor function launch_shell by using subprocess.PIPE, providing output even when command crashes
  • Correct bug for ialb_type=1 or 2 during netcdf write
  • Configure script for O3 at ETHZ, not regularly tested with Jenkins
  • Change link to CDI-submodule, to allow access for people witout DKRZ account
  • Split chained CDO-operators into two steps to prevent crashes on Piz Daint
"},{"location":"release_notes/#54","title":"5.4","text":"

This is a major release that introduces a rewrite of 4 Extpar programmes in Python, a common git-LFS input data repository, a new build-system, 2 additional landuse data sets, CDI-library for icon grids in consistency check, mmap-caching for consistency check for less memory usage, some small improvements in the Fortran code and some minor changes in the testsuite.

  • Rewrite of 4 Extpar programmes in Python
  • Modules extpar_alb_to_buffer.py, extpar_cru_to_buffer.py, extpar_emiss_to_buffer.py and extpar_ndvi_to_buffer.py
  • Small changes of the fields compared to the former Fortran implementation due to different interpolation methods, especially at the coastlines
  • Fields changed:
    • NDVI, NDVI_MAX, NDVI_MRAT
    • ALB_SAT, ALB_DRY
    • ALB, ALUVD, ALNID
    • T_CL
    • EMISS_RAD
  • A review involving users from DWD, MCH, MPIM and ETH took place to ensure the correctness of all fields changed
  • All Python programmes read from the same namelist file namelist.py containing Python dictionaries for each Extpar program.
  • Support of the old and coarse data (it_cl_type = 2) in extpar_cru_to_buffer expires and is replaced the following:

    • it_cl_type = 2 aggregates the coarse data over sea and the fine data over land
    • it_cl_type = 1 aggregates the fine data over land, sea points are not considered
    • For aggregation of the coarse data over land and sea only, use Extpar 5.3 or older
  • Read the users guide for detailed information about the rewritten programmes.

  • git-LFS input data repository

  • All input data that can be processed with Extpar is stored in a unified data repository extpar-input-data
  • Move all useful scripts and informations from raw_data_tools to the data repository hosted at DKRZ.
  • Remove folder raw_data_tools from Extpar repository
  • Some fields are renamed for better understanding, so please check your runscripts to adapt the new names.
  • Location on CSCS: /store/c2sm/extpar_raw_data/linked_data
  • Location on Mistral: /work/pd1167/extpar-input-data/linked_data
  • New build-system
  • New system follows the configure/make/make install paradigm
  • Out-of-source build supported
  • 4 basic steps to compile Extpar into binaries:

    • Run configure.your_machine.your_compiler
    • source modules.env
    • make or make -j 4 (for faster compilation)
    • Kesch at CSCS is no longer supported
  • Corine landuse data

  • Additional landuse data set covering Europe
  • Can only be used in combination with GLOBCOVER (i_landuse_data=1)
  • Set switch l_use_corine=.true. in namelist lu_raw_data to aggregate the new data set
  • The corine landuse data set is only tested on Mistral at DKRZ

  • ECCI landuse data

  • Global landuse data set split in 6 tiles
  • Set switch i_landuse_data=5, ntiles_globcover=6 and ilookup_table_lu = 1 in namelist lu_raw_data to aggregate the new data set
  • The ECCI landuse data is only tested on Mistral at DKRZ

  • Enhanced testsuite

  • Icon test for DWD for all compilers
  • Jenkins on Mistral, Tsa and Daint
  • Convert testsuite src-code from Python2 to Python3
  • Pep8-Coding style test for Python code
  • Allow round-off for certain fields in output
  • Copy all required files from namelistdir (icon grids, clim-fields and Python-files) through testsuite itself

  • CDI library for icon grids

  • CDI write routine replaces write_netcdf_icon_grid routine
  • Output of icon grids always involves CDI, output without CDI no longer supported
  • CDI contained as a git submodule inside the Extpar repository
  • See compile_run for instructions to clone Extpar from GitHub correctly

  • Mmap-caching

  • allows run of Extpar on machines with only little memory
  • new logical parameter l_use_array_cache = .true. * in namelist file *INPUT_CHECK activates mmap-caching
  • Bitwise-identical with and without mmap-caching
  • Only supported and tested for GCC compiler

  • Fortran Code changes

  • Remove all filename_max from INTENT(IN)
  • Output of COSMO/ICON netCDF-files in the buffer modules no longer supported
  • Remove all unused modules/programmes replaced by Python modules
  • Remaining code still needed in Fortan now contained in modules mo_python_data.f90, mo_python_routines.f90, and mo_python_tg_fields.f90
"},{"location":"release_notes/#53","title":"5.3","text":"

This is an intermediate release that reduces code complexity for topo_to_buffer.exe, enhances the testing for INTEL compiler and further cleans the code

  • Merge sgsl_to_buffer into topo_to_buffer
  • New namelist &oro_runcontrol in INPUT_ORO containing lcompute_sgsl
  • For users of former sgsl_to_buffer.exe, namelist &sgsl_io_extpar now moved to INPUT_ORO, containing the new parameter lpreproc_oro
  • The functionality is kept by default for all newly introduced namelist parameters, so for the same workflows as before only change lcompute_sgsl

  • Testsuite

  • Additional check for compiler warning of GCC,INTEL and NAG
  • Unify runscripts for COSMO and ICON
  • Slightly different domain for COSMO1, reducing the required number of ASTER tiles to only 1
  • Add references for INTEL in a seperate directory in data

  • Cleanup

  • Initialize logicals in extpar_consistency_check properly to prevent bugs
  • Remove hardcoded filename in emiss_to_buffer
  • Finalize logging and coding standard as described in developers guide
"},{"location":"release_notes/#521","title":"5.2.1","text":"

This is a minor release containing a bug fix and a small feature addition. * Bug fix for ICON/COSMO file- and variable name mismatch in topography calculation * Add Extpar version number (pulled from git release number) to output NetCDF file

"},{"location":"release_notes/#52","title":"5.2","text":"

This is an intermediate release introducing extpar_emiss_to_buffer, an improved logging, enhanced error checking during I/O and a lot of clean-up and formatting

  • New Extpar executable emiss_to_buffer
  • Aggregates CAMEL emissivity data to the target grid
  • Two raw datasets available (full range and only long-wave radiation)

  • Consistent logger for all Extpar executables

  • Three levels of messages: info, warning and error
  • Each Extpar executable write to its own logfile

  • Clean-up and formatting of all src-files

  • Remove all unused variables and USE-statements
  • Remove all unused dummy arguments in subroutines
  • Implement formatting according the coding-guidelines for Extpar

  • Make all precisions consistent

  • Remove i8 from Extpar, instead make all INTEGER(KIND=i4)
  • Change all REAL to REAL(KIND=wp), wp is defined in mo_kind

  • Small changes in some fields due to fix of implicit type conversion during runtime

  • Z0, max difference ~10^(-7)
  • DEPTH_LK, max difference ~10^(-6)

  • Enhanced error checking during I/O

  • All namelist I/O checked, abort of Extpar in case of incorrect (typos, wrong variables, etc,) namelists
"},{"location":"release_notes/#512_1","title":"5.1.2","text":"

This is a minor release containing a few bug fixes. * Fix build environment on Kesch * Add missing definition of skinc_lu meta data when ECOCLIMAP dataset is chosen.

"},{"location":"release_notes/#511_1","title":"5.1.1","text":"

This is a minor release containing a few bug fixes. * Fix read of l_use_glcc landuse calculation for COSMO runs. * Fix unitialized logical flag to trigger scale separation in topography calculation. * Reactivate all cosmo tests from testsuite on Kesch.

"},{"location":"release_notes/#51","title":"5.1","text":"

This is an intermediate release containing some bug fixes and some minor developments.

  • Changes to Jenkins and the automated testing:
  • Fix Mistral setup so that code runs on compute nodes instead of login nodes
  • Fix Mistral setup so that intel compiler can be tested. Note that only run success is checked for the intel compiler; the results are not yet tested.
  • Fix NAG compiler setup so that only compilation, not testing is done, because testing is too time consuming.

  • Bug fix for iaot_type = 4 (MACv2 aerosols). The code had not been correctly imported from version 4.0.

  • Contributions from DWD including:

  • DWD versions of the python and shell replacement scripts for ndvi, albedo, and cru
  • DWD bug fix for the albedo calculation
  • DWD bug fix for incorrect glacier points

  • New output variable skin conductivity (SKC) developed by Jan-Peter Schulz. Skin conductivity is calculated from the landuse data.

"},{"location":"release_notes/#504","title":"5.0.4","text":"

This is a minor release containing a few bug fixes.

  • Bug fix for problems when soil_type=3 is used. The code had not been correctly imported from version 4.0

  • Bug fix adding missing NetCDF get_varid call when more than one GLOBCOVER tile is used.

"},{"location":"release_notes/#503","title":"5.0.3","text":"

This is a minor release containing a bug fix.

  • Bug fix for incorrect global attributes in output NetCDF file.
"},{"location":"release_notes/#502","title":"5.0.2","text":"

This is a minor release containing a bug fix.

  • Bug fix for incorrect subroutine argument usage in mo_agg_isa.f90.
"},{"location":"release_notes/#501","title":"5.0.1","text":"

This is a minor release fixing a few bugs and some documentation.

  • Bug fix to remove too many characters in write statement (mo_logging.f90)
  • Bug fix for unitialized variable ntiles_globcover (mo_landuse_routines.f90, extpar_consistency_check.f90, and extpar_landuse_to_buffer.f90)
  • Remove unnecessary libraries in Options.daint
  • Fix typos in README.compile_run
"},{"location":"release_notes/#50","title":"5.0","text":"

This release represents a merge of the Extpar official version 4.0 code with the DWD-Extpar version 2.10.

"},{"location":"release_notes/#build-mechanism","title":"Build Mechanism","text":"
  • Added Options file for compiling on LCE with Intel compiler
  • Added Options files for compiling on Mistral with GCC, NAG, and Intel compilers
  • Added Options files for compiling on Mac OS with the GCC compiler
  • Updated Options file for compiling on o3 at ETH with PGI compiler
  • Update bin/gen_info.sh for compatibility with git
"},{"location":"release_notes/#run-scripts","title":"Run scripts","text":"
  • Minor adaptations to run scripts to be compatible with new version
  • Addition of MPI ICON run script
"},{"location":"release_notes/#testing","title":"Testing","text":"
  • Addition of cosmo-dwd and icon tests to testsuite.
  • Update of Jenkins build and test scripts.
  • Add testsuite run scripts for mpi and dwd on mistral.
  • Update of testsuite references.
"},{"location":"release_notes/#code-changes","title":"Code changes","text":""},{"location":"release_notes/#albedo-calculation","title":"Albedo calculation:","text":"
  • Added bin/cdo2alb-buffer.py and extpar_alb_to_buffer.sh to replace slow and incorrect albedo calculation for high resolution ICON model grids
"},{"location":"release_notes/#topography-calculation","title":"Topography calculation:","text":"
  • Added namelist parameter: lsubtract mean_slope
  • Move mo_agg_topo to mo_agg_topo_icon and mo_agg_topo_cosmo
  • Bug fix in mo_topo_sso- changes results of sso_sigma slightly
"},{"location":"release_notes/#soil-calculation","title":"Soil calculation:","text":"
  • Additional HWSD calculation for deep soil
"},{"location":"release_notes/#ndvi-calculation","title":"NDVI calculation:","text":"
  • Added bin/cdo2ndvi-buffer.py and extpar_ndvi_to_buffer.sh to replace slow and incorrect NDVI calculation for high resolution ICON model grids
"},{"location":"release_notes/#climatological-2m-temperature-calculation","title":"Climatological 2M temperature calculation:","text":"
  • Added bin/cdo2t_cl-buffer.py and extpar_cru_to_buffer.sh to replace slow and incorrect TCLIM calculation for high resolution ICON model grids
  • Added namelist parameter: ltcl_merge
"},{"location":"release_notes/#flake-calculation","title":"Flake calculation:","text":"
  • Added namelist parameter: lflake_correction.
"},{"location":"release_notes/#consistency-check","title":"Consistency check:","text":"
  • [Changes results] Included lower limit for roughness length
  • ERA-I SST and T2M temperature for ICON model
"},{"location":"release_notes/#grib-output-not-supported","title":"Grib output NOT supported","text":""},{"location":"release_notes/#gme-model-not-supported","title":"GME model NOT supported","text":""},{"location":"release_notes/#changes-in-results","title":"Changes in Results","text":"

Due to the large amount of changes in the code in this release, there are many differences in the resulting external parameter fields generated by the release 5.0 code compared to the fields generated by older Extpar codes. The only code change in this release that deliberately changed the results was the addition of a lower limit for roughness length, which is 1e-6. Otherwise, any changes in results that can be seen came directly from bug fixes to the code, and as such most of them are small and are not expected to change results in the COSMO or ICON model runs. Some of these changes in results are examined in the next two sections.

"},{"location":"release_notes/#extpar-version-40-to-extpar-version-50","title":"Extpar version 4.0 to Extpar version 5.0","text":"

The technical testsuite in Extpar was used to compare the external parameter fields from Version 4.0 and Version 5.0 for three different MeteoSwiss operational setups for COSMO and a climate setup for COSMO-CLM.

"},{"location":"release_notes/#cosmo-7-globe-topography-input","title":"COSMO 7, globe topography input","text":"

For the COSMO7 MCH setup using the globe topography data set, changes in the results smaller than 1e-6 can be seen for several variables, including the aerosol variables, albedo variables, HORIZON, and SSO_SIGMA. Larger changes on the order of 3 degrees can be seen in the SSO_THETA variable; these are due to a bug fix in this release, and are expected. Finally, roughness length is different as well due to the introduction of the lower limit value of 1e-6.

"},{"location":"release_notes/#cosmo-7-aster-topography-input","title":"COSMO 7, aster topography input","text":"

For the COSMO7 MCH setup using the aster topography data set, the changes in the results are less than 5e-7, and occur in the aerosol, HORIZON, and SSO_SIGMA variables.

"},{"location":"release_notes/#cosmo-1-aster-topography-input","title":"COSMO 1, aster topography input","text":"

For the COSMO1 MCH setup using the aster topography data set, the changes in the results are less than 4e-5, and occur in the aerosol, HORIZON, SKYVIEW, and T_CL variables.

"},{"location":"release_notes/#cosmo-cm-climate-setup","title":"COSMO-CM climate setup","text":"

For the COSMO-CLM climate setup using the globe topography data set, changes in results smaller than 3e-8 can be seen in the SSO_SIGMA and SSO_STDH variables. Larger changes on the order of 3 degrees can be seen in the SSO_THETA variable; these are due to a bug fix in this release, and are expected. Due to another bug fix, the ALB_SAT and ALB_DRY variables have changed results on the order of .2. Finally, roughness length is different as well due to the introduction of the lower limit value of 1e-6.

"},{"location":"release_notes/#dwd-extpar-version-210-to-extpar-version-50","title":"DWD Extpar version 2.10 to Extpar version 5.0","text":"

Comparisons of the COSMO D2 setup used operationally by DWD were carried out to compare the current operational Extpar code (DWD version 2.10) with the new release 5.0. This comparison showed no significant differences in the generated external parameter fields. Get more details of this comparison here

"},{"location":"testing/","title":"Testing","text":"

EXTPAR is tested with an adapted version of the COSMO technical testsuite .

"},{"location":"testing/#run-tests","title":"Run Tests","text":"

First step is to compile the code following the instructions in Compile and Run.

"},{"location":"testing/#docker","title":"Docker","text":"
docker run extpar bash -c \"/workspace/test/jenkins/test_docker.sh\"\n
"},{"location":"testing/#levante","title":"Levante","text":"
cp bin/* test/testsuite/bin/.\ncd test/testsuite\n./data/get_data.sh\nsbatch submit.levante.sh\n

The results of the testsuite can be found in file testsuite.out

An example output could look as follows:

"},{"location":"testing/#testlists","title":"Testlists","text":"

There are many different testlist, each containing a set of tests for different setups, compiler or models:

"},{"location":"testing/#gcc","title":"GCC","text":"
  • COSMO
  • ICON
  • Landuse
"},{"location":"testing/#tolerances","title":"Tolerances","text":"

It is possible to define an optional tolerance threshold for each test and each field. To allow deviations for the test icon_d2 for example, just dit the the tolerances file .

The syntax is as follows:

PARAMETER, abs_diff\nNDVI, 9.0e-08\nW_SNOW, 5.0e-05\n
"},{"location":"testing/#add-a-new-test","title":"Add a New Test","text":"
  1. Modify the testlist.xml file to add the new test. Alternatively, you could also add a new testlist XML file (with a new name). The testlist which is run can be chosen from the testsuite command line.

  2. Make a folder in the data folder for the new test containing the INPUT_* files and the namelist.py for the Python-CDO modules.

  3. Send any binary reference files to upload to the ftp site to the source code administrator.

"},{"location":"user_manual/","title":"User and Implementation Guide","text":"

Hermann Asensio / Martina Messmer / Daniel L\u00fcthi / Katie Osterried / Jonas Jucker / Jacopo Canton / Philipp Sommer / J\u00fcrgen Helmert / Michael J\u00e4hn

This documentation provides an overall description of the EXTPAR software, provides detailed information on specific modules, current limitations and the namelist input.

For the sake of completeness, the latest EXTPAR documentation (v5.14) that was created from the original LaTeX file, can be downloaded here.

"},{"location":"user_manual/SUMMARY/","title":"SUMMARY","text":"
  • Home
  • Overall Description
  • Software Modules
  • Fortran Modules
  • Python Modules
  • Current Limitations
  • Namelist Input
"},{"location":"user_manual/user_manual_01_overall_description/","title":"Overall Description","text":"

Numerical Weather Prediction (NWP) models and Climate models require geographical localized datasets like the topographic height of the earth surface, the plant cover, the distribution of land and sea and, dependent on the schemes used, a variety of other external parameters.

The EXTPAR software system (EXTPAR - External Parameter for Numerical Weather Prediction and Climate Application) is able to generate external parameters for the different models COSMO and ICON. The software can run on a UNIX or Linux system where the raw data is stored. It allows operators (experienced users) running the scripts to create new external parameters controlled by user specifications like the model domain.

The following steps are performed for the generation of external parameters:

  1. The target grid has to be specified. The supported target grids are

    • Rotated and non-rotated longitude-latitude grid (COSMO)
    • Icosahedral Triangular grids (ICON) with optionally higher resolution in selected regions ('local zooming')
  2. The different raw data sets are aggregated to the target grid considering all raw data elements which are within the target grid element. If the target grid has a higher resolution than the input grid on which the raw data is available either an interpolation is performed or the target grid is filled with the nearest neighbor, but sub-grid scale statistical calculations (e.g. subgrid scale variance of orograhic height) are dismissed.

  3. All the different external parameter sets have to be checked for consistency against each other. In case of conflicts default values are set automatically. In the NetCDF output, information on the input data and the processing software is given.

"},{"location":"user_manual/user_manual_01_overall_description/#main_input","title":"Input Raw Datasets","text":"

The information for the external parameters is aggregated from various raw datasets for land use data, orography or soil data, see table below for a detailed list of the raw datasets.

The input data for EXTPAR is stored in a git-LFS repository at https://gitlab.dkrz.de/extpar-data/extpar-input-data . Instructions for downloading the whole repository or updating with new datasets can be found in the git-LFS repository. For access to the input data repository, contact the current EXTPAR source code administrator.

Dataset Source Resolution GLOBE orography NOAA/NGDC 30'' ASTER orography (limited domain: 60\u00b0N - 60\u00b0S) METI/NASA 1'' MERIT/REMA orography Composite DEM 3'' (90m) Globcover 2009 ESA 10'' GLC2000 land use JRC Ispra 30'' GLCC land use USGS 30'' Ecoclimap-SG land use CNRS and Meteo France 300m ESA CCI-LC ESA 10'' DSMW Digital Soil Map of the World FAO 5' HWSD Harmonized World Soil Database FAO/IIASA/ISRIC/ISSCAS/JRC 30'' HWSD Harmonized World Soil Database USDA KIT 30'' NDVI Climatology, SEAWiFS NASA/GSFC 2.5' CRU near surface climatology CRU University of East Anglia 0.5 degree Aerosol Optical thickness NASA/GISS 4x5 degree (Global Aerosol Climatology Project) AeroCom Global AOD data AeroCom Project 1 degree MACC-II climatological AOD (2003-2012) ECMWF 1.125 degree MACv2 monthly AOD, SSA and ASY data MPI, RHM 1 degree CAMS monthly 3D-climatology 11 types of aerosols ECMWF, RHM 3 degree Global lake database (GLDB) DWD/RSHU/MeteoFrance 30'' MODIS albedo NASA 5' MODIS derived soil albedo values Community Land Model 3.5 30' CAMEL Emissivity NASA 5km EDGAR Emissions European Commission /JRC/PBL 0.1 degree MODIS cloud droplet number climatology Q06 NASA 1 degree

Table 1: Input raw datasets

"},{"location":"user_manual/user_manual_01_overall_description/#main_output","title":"Output External Parameters","text":"

The output fields with the external parameters are shown here:

External parameter Short name Unit Raw dataset geometrical height HSURF \\(m\\) GLOBE/ASTER/MERIT/REMA geopotential of earth surface FIS \\(m^{2} s^{-1}\\) GLOBE/ASTER/MERIT/REMA standard deviation of subgrid scale orographic height SSO_STDH \\(m\\) GLOBE/ASTER/MERIT/REMA anisotropy of topography SSO_GAMMA 1 GLOBE/ASTER/MERIT/REMA angle between principal axis of orography and global E SSO_THETA 1 GLOBE/ASTER/MERIT/REMA mean slope of subgrid scale orography SSO_SIGMA 1 GLOBE/ASTER/MERIT/REMA surface roughness Z0 \\(m\\) GLC2000, GLOBE/ASTER/MERIT/REMA Slope aspect SLOPE_ASP deg GLOBE/ASTER/MERIT/REMA Slope angle SLOPE_ANG deg GLOBE/ASTER/MERIT/REMA Horizon angles (resolution from 15deg) HORIZON deg GLOBE/ASTER/MERIT/REMA Skyview factor SKYVIEW - GLOBE/ASTER/MERIT/REMA soil texture SOILTYP - DSMW/HWSD fraction of sand FR_SAND % HWSD fraction of silt FR_SILT % HWSD fraction of clay FR_CLAY % HWSD fraction of organic carbon FR_OC % HWSD bulk density BULK_DENS \\(g cm^{-3}\\) HWSD deep soil texture SUBSOILTYP - HWSD deep soil fraction of sand SUB_FR_SAND % HWSD deep soil fraction of silt SUB_FR_SILT % HWSD deep soil fraction of clay SUB_FR_CLAY % HWSD deep soil fraction of organic carbon SUB_FR_OC % HWSD deep soil bulk density SUB_BULK_DENS \\(g cm^{-3}\\) HWSD Fraction of Heavy Clay fr_hcla 1 HWSD_USDA Fraction of Silty Clay fr_silc 1 HWSD_USDA Fraction of Light Clay fr_lcla 1 HWSD_USDA Fraction of Silty Clay Loam fr_sicl 1 HWSD_USDA Fraction of Clay Loam fr_cloa 1 HWSD_USDA Fraction of Silt fr_silt 1 HWSD_USDA Fraction of Silty Loam fr_silo 1 HWSD_USDA Fraction of Sandy Clay fr_scla 1 HWSD_USDA Fraction of Loam fr_loam 1 HWSD_USDA Fraction of Sandy Clay Loam fr_sclo 1 HWSD_USDA Fraction of Sandy Loam fr_sloa 1 HWSD_USDA Fraction of Loamy Sand fr_lsan 1 HWSD_USDA Fraction of Sand fr_sand 1 HWSD_USDA Fraction of Undefined or Water fr_udef 1 HWSD_USDA ground fraction covered by plants max (vegetation period) PLCOV_MX 1 GLC2000/Globcover/ ESA CCI-LC ground fraction covered by plants min (vegetation period) PLCOV_MN 1 GLC2000/Globcover/ ESA CCI-LC ground fraction covered by artificial (urban) areas URBAN 1 GLC2000/Globcover/ ESA CCI-LC ground fraction covered by artificial (urban) areas URBAN 1 GLC2000/Globcover/ESA CCI-LC/ LCZs with TERRA_URB ground fraction covered by deciduous forest FOR_D 1 GLC2000/Globcover/ ESA CCI-LC skin conductivity SKC \\(W m^{-1} K^{-1}\\) Globcover/ESA CCI-LC root depth ROOTDP \\(m\\) GLC2000/Globcover/ ESA CCI-LC leaf area index max(vegetation period) LAI_MX 1 GLC2000/Globcover/ESA CCI-LC leaf area index min (vegetation period) LAI_MN 1 GLC2000/Globcover/ ESA CCI-LC plant resistance PRS_MIN \\(s m^{-1}\\) GLC2000/Globcover/ ESA CCI-LC long wave surface emissivity EMISS_RAD 1 GLC2000/Globcover/ ESA CCI-LC (monthly) normalized differential vegetation index NDVI 1 SEAWIFS Annual maximum of normalized differential vegetation index NDVI_MAX 1 SEAWIFS (monthly) proportion of actual value/ maximum normalized differential vegetation index NDVI_RATIO 1 SEAWIFS (monthly) optical thickness from black carbon aerosol AER_BC 1 GACP (monthly) optical thickness from dust aerosol AER_DUST 1 GACP (monthly) optical thickness from organic aerosol AER_ORG 1 GACP (monthly) optical thickness from SO4 aerosol AER_SO4 1 GACP (monthly) optical thickness from sea salt aerosol AER_SS 1 GACP (monthly) aerosol optical thickness for RG92 spectral bands AOT12 1 MACv2 (monthly) single scattering albedo for RG92 spectral bands SSA12 1 MACv2 (monthly) asymmetry factor for RG92 spectral bands ASY12 1 MACv2 (monthly) layer-integrated mass of Sea Salt with dry radius in the range 0.03-0.5 microns Sea_Salt_bin1 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Sea Salt with dry radius in the range 0.5-5.0 microns Sea_Salt_bin2 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Sea Salt with dry radius in the range 5.0-20.0 microns Sea_Salt_bin3 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Mineral Dust with dry radius in the range 0.03-0.55 microns Mineral_Dust_bin1 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Mineral Dust with dry radius in the range 0.55-0.9 microns Mineral_Dust_bin2 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Mineral Dust with dry radius in the range 0.9-20.0 microns Mineral_Dust_bin3 \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of hydrophilic Organic Matter Organic_Matter_hydrophilic \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of hydrophobic Organic Matter Organic_Matter_hydrophobic \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of hydrophilic Black Carbon Black_Carbon_hydrophilic \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of hydrophobic Black Carbon Black_Carbon_hydrophobic \\(kg m^{-2}\\) CAMS (monthly) layer-integrated mass of Sulfates Sulfates \\(kg m^{-2}\\) CAMS (monthly) Pressure at base of layer half_level_pressure Pa CAMS Near surface temperature (climatological mean) T_2M_CL \\(K\\) CRU Lake Depth DEPTH_LK \\(m\\) GLDB Lake Fraction FR_LAKE 1 GLDB (monthly) albedo ALB_DIF12 % MODIS (monthly) Near Infrared Albedo ALNID % MODIS (monthly) Ultra Violet Albedo ALUVD % MODIS soil albedo for dry soils ALB_DRY % Community Land Model 3.5 soil albedo for saturated soils ALB_SAT % Community Land Model 3.5 fraction of impervious surface area ISA 1 NOAA, EEA or LCZs with TERRA_URB anthropogenic heat flux AHF \\(W m^{-2}\\) NOAA or LCZs with TERRA_URB subgrid-scale slope parameter S_ORO 1 GLOBE, ASTER, MERIT/REMA EMISS yearly maximum for climatology 1998-2003 EMISS_MAX 1 CAMEL monthly mean EMISS climatology 1998-2003 EMISS 1 CAMEL (monthly) proportion of actual value/maximum normalized differential vegetation index EMISS_MRAT 1 CAMEL Urban paved fraction FR_PAVED 1 LCZs with TERRA_URB Urban building fraction URB_BLDFR 1 LCZs with TERRA_URB Urban building height URB_BLDH \\(m\\) LCZs with TERRA_URB Urban canyon height-to-width ratio URB_H2W 1 LCZs with TERRA_URB Urban shortwave albedo URB_SALB 1 LCZs with TERRA_URB Urban thermal albedo URB_TALB 1 LCZs with TERRA_URB Urban emissivity URB_EMIS 1 LCZs with TERRA_URB Urban heat conductivity URB_HCON 1 LCZs with TERRA_URB Urban heat capacity URB_HCAP \\(J/K\\) LCZs with TERRA_URB Annual black carbon emissions emi_bc \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Annual organic carbon emissions emi_oc \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Annual sulfur dioxide carbon emissions emi_so2 \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Annual ammonia emissions emi_nh3 \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Annual nitrogen oxides emissions emi_nox \\(kg\\,m^{-2}\\,s^{-1}\\) EDGAR Monthly cloud droplet number climatology cdnc \\(cm^{-3}\\) MODIS

Table 2: Output external parameters

"},{"location":"user_manual/user_manual_02_software_modules/","title":"Software Modules","text":""},{"location":"user_manual/user_manual_02_software_modules/#Overview","title":"Overview","text":"

The software EXTPAR is composed of thirteen autonomous programmes. Twelve programmes are responsible for aggregating a raw data to the target grid, which is specified by the user. The thirteenth program, the consistency check, is performed in the end. The executables are called extpar_*_to_buffer, whereas the star * stands for ahf (anthropogenic heat flux), aot (aerosol optical thickness), cru (temperature climatology of the Climate Research Unit (CRU)), landuse, topo, ndvi (normalized difference vegetation index), soil, flake (fraction lake), isa (impervious surface area), albedo, emiss (emissivity) and era (ERA climatologies) respectively. In Fig. 1 a schematic representation of EXTPAR is drawn. For the sake of clarity only the topography and land-use path is shown. The same can be applied for the other ten raw data sets. For all these programs there exist namelists. Most of the namelists only contain the name and path of the raw data file and the name of the buffer file, which is later used for the consistency check, and the name of the output of the final external variables.

The software modules read from the following namelist files:

  • INPUT_AOT
  • INPUT_LU
  • INPUT_ORO, INPUT_OROSMOOTH, INPUT_RADTOPO, INPUT_SCALE_SEP
  • INPUT_SOIL
  • INPUT_hwsdART
  • INPUT_FLAKE
  • INPUT_grid_org
  • INPUT_COSMO_GRID or INPUT_ICON_GRID
  • namelist.py

The namelists INPUT_grid_org and either INPUT_COSMO_GRID or INPUT_ICON_GRID are used in all the programs, as they contain the general information of the target grid to which the raw data should be aggregated. The namelist file namelist.py is read by all Python programmes.

Figure 1: Schematic illustration of the software EXTPAR.

"},{"location":"user_manual/user_manual_02_software_modules/#Python-CDO","title":"Hybrid Python-CDO Structure","text":"

For three of the external parameters calculated by EXTPAR, namely albedo, NDVI, and the Hadley CRU climatologies, problems appeared with target resolutions much higher than the provided input data set resolutions. The problem is that not all target grid points get assigned a proper value when using the legacy Fortan code and interpolation method.

The algorithm used in the legacy Fortran modules aggregates source grid point values onto the target grid where the input data is finer than the target grid and uses bi-linear interpolation to fill the remaining grid points where the input data is sparser than the target grid. However, starting from a 5 km global resolution for the target grid, points can potentially get assigned unreasonable values because of the insufficiency of the bi-linear interpolation algorithm.

To resolve this issue, for EXTPAR Version 5.4 a rewrite of those Fortran modules in Python, using the more sophisticated interpolation methods from CDO with support for all grids was conducted. Because the interpolation methods implemented in CDO are faster than those in Fortran for large model grids, emiss_to_buffer is written in Python as well. A rewrite in Python only makes sense for Fortran modules that do simple calculations with the data. These calculations can easily be substituted with CDO-commands in the Python modules. For modules doing complex calculations and providing many namelist parameters the user can define, like extpar_topo_to_buffer or extpar_landuse_to_buffer, a rewrite in Python is not planned.

The interpolation algorithms selected are:

  • albedo distance-weighted average remapping
  • NDVI first order conservative remapping
  • EDGAR first order conservative remapping
  • CDNC first order conservative remapping
  • CRU climatology distance-weighted average remapping
  • emissivity first order conservative remapping
  • ERA climatology first order conservative remapping
  • AHF/ISA bilinear interpolation

The description of the used algorithms can be found via the CDO documentation.

"},{"location":"user_manual/user_manual_02_software_modules/#Summary","title":"Summary","text":"

The external parameters can be generated by using thirteen programs to aggregate the various raw datasets to the target grid and after this by calling the final program for the important consistency check.

  1. In a first step, the target grid and other parameters have to be specified by the user in the runscript (see section Grid Definition for the details).

  2. Then the aggregation of the raw datasets listed in Table 1 to the given target grid can be performed by calling following executables

    • extpar_aot_to_buffer
    • extpar_cru_to_buffer
    • extpar_landuse_to_buffer
    • extpar_topo_to_buffer
    • extpar_ndvi_to_buffer
    • extpar_soil_to_buffer
    • extpar_flake_to_buffer
    • extpar_alb_to_buffer
    • extpar_isa_to_buffer
    • extpar_ahf_to_buffer
    • extpar_emiss_to_buffer
    • extpar_hwsdART_to_buffer
    • extpar_era_to_buffer
    • extpar_edgar_to_buffer

    These programs generate intermediate NetCDF files (\"buffer\") with the aggregated data.

  3. The executable extpar_consistency_check reads in the buffer-files, performs an automated consistency check, and finally generates the output fields listed in Table 2.

The task of the consistency check that is performed at the end is to find inconsistencies in the soil data, the lake data and the NDVI data. In the soil data problems may appear between the soil type and the land-use, in particular for water and ice grid elements. For the fraction lake, minimal and maximal lake depth must be introduced and some seas such as the Caspian and the Dead Sea as well as Lake Constance must be defined manually. For more information see chapter 3.7.

"},{"location":"user_manual/user_manual_03_fortran_modules/","title":"Fortran Modules","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_topo_to_buffer","title":"extpar_topo_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description","title":"Short description","text":"

The program extpar_topo_to_buffer aggregates the orography of the GLOBE, ASTER, or MERIT/REMA dataset to the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition","title":"Target grid definition","text":"

The first part of this program contains several routines that read the namelists defined in the run script (see chapter 6 for more information on the run scripts). The first routine (init_target_grid) collects all the information needed to define the target grid with an integrated routine that gathers the variables given in the namelist INPUT_grid_org. The variable igrid_type, which can either be 1 ('ICON') or 2 ('COSMO'), is an integer switch to define the target grid.

Then a routine reads the namelist of the corresponding grid, which is either INPUT_ICON_GRID or INPUT_COSMO_GRID, depending on the chosen grid type. The run script contains only one of the two namelists. This must be manually changed by the user. These namelists contain among other variables the resolution of the grid, the user specified domain and the location of the center of the grid (for closer information about the namelists compare chapters 6.2.2 - 6.2.3). This allows an exact definition of the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#subgrid-scale-slope","title":"Subgrid-scale slope","text":"

The namelist INPUT_ORO contains the parameter lcompute_sgsl, to determine whether SGSL should be calculated from the respective raw topography data. Formerly this was done in a separate executable extpar_sgsl_to_buffer.exe. From Release 5.3 onwards, the SGSL calculation was incorporated into the execututable 'extpar_topo_to_buffer`. As an intermediate step, the SGSL is written out to NetCDF, one separate file for each raw topography tile is required. In case the preprocessed SGSL NetCDF are already available, setting the parameter lpreproc oro= .false., deactivates the preprocessing, but not the aggregation of SGSL to the target grid. We recommend to only do the preprocessing for the GLOBE dataset, because the computational cost for the ASTER or MERIT/REMA dataset is very high and no validation has taken place for this dataset.

"},{"location":"user_manual/user_manual_03_fortran_modules/#topographic-correction-for-radiation","title":"Topographic correction for radiation","text":"

In a second step, the namelist INPUT_RADTOPO is read. It contains the information if the user desires the calculation of the topographical corrected radiation parameters or not. If the switch is set to .TRUE. a border is added to the COSMO domain, as the computations need grid points beyond the edges of the normal domain. For ICON an on the fly extension of the grid is not possible, leading to missing data at the boundaries. Therefore the namelist-switch max_missing defines the treshold for the allowed fraction of missingness. Altough the topographical corrected radiation can be calculated for both ICON and COSMO grids, the two sets of fields cannot be considered as identical, because for ICON grids one assumes plain (non-tilted) grid-cells, whereas for COSMO one also takes into account self-shading and effects related to tilted-plains for the skyview-factor.

The number of horizons is specified in the namelist. For the COSMO-7 and COSMO-2 setup 24 horizons are recommended. The icon-only parameter radius defines the radial distance taken into account for the topographical corrected radiation parameters. To account for the anisotropic behaviour of longwave-radiation, the namelist parameter itype_scaling defines the power of the term SIN(horizon-angle) in the equation of the skyview-factor. Due to performance reasons, for ICON the parameter min_circ_cov determines how many grid-cells can be skipped on the circumference considered for the computations.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-topography-data","title":"Raw topography data","text":"

The namelist INPUT_ORO gives the possibility to switch between two raw orographical data sets (GLOBE, ASTER, or MERIT/REMA). In contrast to the 90m-data of MERIT/REMA, it must be considered, that the 30m-data of ASTER are not completely downloaded and are therefore not globally available. The downloaded region extends from 60N to 60S and from 180W to 180E. It is not recommended to derive the topographical parameters from ASTER if the region is beyond 60 degrees north or south. The ASTER files are arranged as displayed in Figure 2. As the computational time of the program extpar_topo_to_buffer depends mainly on the number of ASTER files that are read in, two new parameters are introduced in the namelist. These two parameters give the number of columns and rows of the used ASTER files. The filenames of the desired ASTER files must be given manually. Figure 2 gives an example on how to use these parameters in the case of COSMO-2. A similar approach is used for MERIT/REMA DEM as shown in Figure 3. The latitude range between 60-90 deg S is covered by REMA DEM, which was mapped to the MERIT data format by BKG, Germany. If GLOBE is used the columns and rows are set to 4 and all GLOBE files must be listed in the topo_files parameter. A check in the program extpar_topo_to_buffer is introduced, which gives a warning if the borders of the domain are exceeded. This is followed by an abortion of this program. As there is no need to calculate the subgrid scale parameters (SSO) for high resolution setups, there is the logical switch lsso_parm to turn off the calculation of the SSOs.

Figure 2: Illustration of the single domains of the 240 ASTER tiles. An example of how the three parameters ntiles_columns, ntiles_row and topo_files in the namelist could look like is given in red.

Figure 3: Illustration of the single domains of the 60 MERIT and the 12 REMA tiles below 60 deg S latitude.

Furthermore the variables of the namelist INPUT_ORO, which cover all the raw topographical data information, are fed into the program. In this namelist the path of the raw data is given as well as the names of the topography data files. An integer switch allows the choice between the highly resolved, non-global topography ASTER, the global but coarser MERIT/REMA and the coarser and global data set GLOBE (1: GLOBE, 2: ASTER, 3: MERIT/REMA). Furthermore the logical switch to decide whether the SSO parameters are desired or not is read. In order to define the right number of raw data tiles the variables ntiles_column and ntiles_row must be available in the namelist. Additionally, the names for the buffer and output files are defined.

The topography data files must be manually changed in the run script, when switching from GLOBE to ASTER, or MERIT/REMA and vice versa.

Then, the number of tiles of the raw topography data is defined (this varies between the raw data sets: 16 tiles for GLOBE, 1 - 240 tiles for ASTER, 72 tiles for MERIT/REMA). This value is the product of the number of tiles in each column and each row. The variables concerning the raw topography are allocated and in a further step filled with the according values. These values are the edges of each raw topography tile, the number of gridpoints in x- and y-direction, as well as the resolution in both directions. These are directly deduced from the raw data NetCDF files. Finally the borders of the ASTER domain are defined, when ASTER is used.

After the definition of the target grid and the topography set, a check examines the compatibility of the user specified input with the target grid; as ASTER is not globally available at the moment it is checked that the user specified domain is contained in the current ASTER domain. And, if this is not the case, the extpar_topo_to_buffer is aborted with an error message.

"},{"location":"user_manual/user_manual_03_fortran_modules/#scale-separation-input","title":"Scale separation input","text":"

The namelist INPUT_SCALE_SEP gives all the information needed to calculate the SSO parameters and roughness length based on a 3 km filtered topography. Thus the logical switch lscale_separation must be read to decide if a scale separation is desired or not. Furthermore the raw data files and path must be provided. Note that the lscale_separation can only be set to .TRUE. if GLOBE is used as topography, as there is no ASTER or MERIT/REMA based 3 km filtered topography available yet. Additionally the user must decide if the computation of the SSO parameters make sense or not. Table 3 can give some assistance to come to the right decision.

Resolution Calculation of standard deviation lscale_separation Model resolution is smaller than raw data resolution SSOs: \\(\\sigma = 0\\),z0: \\(\\hspace{12pt}\\sigma = 0\\) .FALSE. Model resolution is greater than the raw data resolution but smaller than 3 km SSOs: \\(\\sigma = 0\\),z0: \\(\\hspace{12pt}\\sigma = \\sum {(model - raw\\hspace{2pt} data)}^{2}\\) .FALSE. and lsso_param = .FALSE. Model resolution is greater than 3 km SSOs: \\(\\sigma = \\sum {(model - 3km\\hspace{2pt} filt )}^{2}\\),z0: \\(\\hspace{12pt}\\sigma = \\sum {(3km\\hspace{2pt} filt - raw\\hspace{2pt} data)}^{2}\\) .TRUE.

Table 3: Recommendations on the usage of the scale separation. Be aware that the actual model topography resolution is approximately twice as large as the model resolution. E.g. COSMO-2: The resolution of the topography is approximately 4 km.

"},{"location":"user_manual/user_manual_03_fortran_modules/#orographical-smoothing-input","title":"Orographical smoothing input","text":"

The last namelist that must be read before allocating the orography is the namelist INPUT_OROSMOOTH, which defines all the variables needed to perform an orographical smoothing. The lfilter_oro logical switch, controls the computation of the smoothing in EXTPAR.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-raw-topography-to-the-target-grid","title":"Aggregation of the raw topography to the target grid","text":"

The subroutine det_topo_tiles_grid defines the grid of each raw topography data tile. For this, the start and end latitude and longitude of each tile, the distance between two grid points in the latitudinal and longitudinal direction (dlat, dlon) as well as the number of grid points in both directions (nlat, nlon) are derived for each tile. Additionally, the grid for the whole GLOBE, ASTER, or MERIT/REMA domain is derived; This is done in the subroutine det_topo_grid.

Before the raw topography can be aggregated on the target grid, the target variables must be allocated. These variables include the land fraction (FR_LAND), the elevation of the surface (hh_target), the standard deviation of the elevation (stdh_topo), the roughness length of the topography (z0_topo), the sub-grid scale orography parameters (theta_topo, aniso_topo and slope_topo) and the topographical corrected radiation parameters (slope_asp, slope_ang, horizon and skyview). For the ICON grid some additional parameters must also be allocated.

The following paragraphs describe computations on the raw data grid.

The subroutine agg_topo_data_to_target_grid does the actual work of aggregating the raw topography to the target grid. The whole topographical data set is divided in bands of 500 grid points in the latitudinal direction and the whole range of the raw data domain in the longitudinal direction (compare for this the black band in Fig. 4). This band is introduced to optimize memory usage, as it is not possible to read the whole raw data in one pass. In order to read the correct raw data the start and end index of each tile (green crosses in Fig. 4) is defined. These indices are additionally associated with a start and end index (red circles in Fig. 4) inside the band. The definition of the two kinds of indices is performed by the routine get_topo_tile_block_indices. With this band the whole raw data is read step by step as suggested in Fig. 4. If the scale separation is desired the same procedure is applied to the 3 km filtered topography.

Figure 4: Schematic illustration of the filling of the raw data with a 500 grid points long band. The green crosses indicate the start end end latitudes and longitudes of each raw topography tile (light blue tiles), whereas the red circles show the indices inside the band, where the green indices of the tiles must be placed.

After this step, a temporary variable of elevation values is filled. This variable consists of three rows, which comprises the whole longitude range of the raw topography data. This is used to deduce the gradients of the topography, which are calculated as averaged differences between one eastern and one western grid point (x-gradient) or with one northern and one southern grid point (y-gradient). From these gradients in x- and y- direction also the squared gradients and the dx\\(\\ast\\)dy are computed.

This is followed by a call of the subroutine find_rotated_lonlat_grid_element_index. This routine defines to which grid element of the target grid a certain grid element of the raw topography belongs. The allocation of the raw data points to the target grid element is performed as shown in Fig. 5 a). All raw data elements that are closer than half a grid point (green box) to the target point (red circle) are used to define the value at the corresponding target grid point. Only the green grid elements in Fig. 5 b) belong to a target grid element. The rest of the raw topography is unused.

Figure 5: a) Illustration of the aggregation of the raw data to the target grid. The red circle indicates a target grid point, while the green rectangle represents the part of the raw data that is aggregated on the target grid point. b) Showing the target grid on top of the raw data set, where only the green grid points of the raw data are used for the target grid.

The elevations of raw data pixels that belong to one target grid element are summed up, and the number of raw data pixels contributing to one target grid element is tracked. A summation of the raw data values for each target grid element is also performed for the squared elevation, which is later used for the standard deviation, and for the gradients calculated before, which are required for the computation of the subgrid scale orography parameters. The latter is only calculated if the SSO parameters are desired. When making use of the scale separation the squared differences between the original and the 3 km filtered topography must be computed at every grid point. This is needed in order to calculate the roughness length specific standard deviation. After these calculations, the temporary rows are shifted to the north and the computation is repeated for the next center line. As soon as a band of 500 rows is finished a new one will be read in.

Now that all auxiliary variables are available, all loops over the raw topography data are closed and a new one over all the grid points of the target grid is opened.

The following paragraphs describe computations on the target grid.

First of all the elevation is calculated as the mean of all the raw topography data points that are enclosed in one target grid point.

As soon as the topography is available on the target grid, the orographical smoothing is applied using the subroutine do_orosmooth.

In a next step the variance and the standard deviation of the elevation at each target grid point is estimated. Subsequently, the SSO parameters angle of principle axis, anisotropy factor and slope parameter are calculated according to Lott and Miller (1996). These SSOs are only calculated if the SSO switch is set to .TRUE. and if the standard deviation of the height is more than 10 meters, as the trivial case of the ocean is tried to be avoided. If the scale separation is switched on the SSOs are based on the 3 km filtered topography. Finally the orographical roughness length is calculated using the standard deviation, but only if at least one raw data pixel is present in the target grid element.

In the case where no raw topography data pixel is available in a target grid, a weighted bilinear interpolation between neighboring raw data grid element is performed to obtain an elevation in all target grid points. This mainly happens if the raw topography has a similar resolution as the target grid. If the bilinear interpolation needs to be applied, all the SSO as well as z0 are set to zero for this grid element. With this step the end of the subroutine agg_topo_data_to_target_grid is reached.

In the program extpar_topo_to_buffer an additional check on SSOs and z0 is performed. If none of the elements of the target grid is associated with at least ten raw data pixels, or as soon as one single element is not associated with any raw data pixel, all the SSOs and z0 are set to zero.

As soon as there is a value for all the target grid elements, the calculation for the topographical corrected radiation parameters can start, if desired at all.

Finally NetCDF files for the orography based external parameters are created, where different NetCDF routines are used for each grid type, as different parameters are needed for each of them. If the lradtopo is set to .TRUE. the enlarged domain is cut back to the user specified domain, before writing it to the NetCDF file.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output","title":"Used namelist files and data in-/output","text":"
  • namelist files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_ORO, INPUT_OROSMOOTH, INPUT_RADTOPO

  • data input (GLOBE): GLOBE_A10.nc - GLOBE_P10.nc

  • data input (ASTER): ASTER_T001.nc - ASTER_T240.nc

  • data input (MERIT/REMA): MERIT_N90-N60_E150-E180.nc4 - REMA_BKG_S60-S90_W180-W150.nc4

  • data input (filtered): GLOBE_A_filt_lanczos_window.nc - GLOBE_P_filt_lanczos_window.nc, GLOBE_A_filt_tukey_0.75_3.0_it4.nc - GLOBE_P_filt_tukey_0.75_3.0_it4.nc

  • Output: buffer file with orography data (/orography_io_extpar/ orography_buffer_file) output file with orography data (used in extpar_cru_to_buffer) (/orography_io_extpar/ orography_output_file)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_landuse_to_buffer","title":"extpar_landuse_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_1","title":"Short description","text":"

The executable extpar_landuse_to_buffer aggregates the land use data to the target grid. Five different raw datasets can be processed: Globcover, GLC2000, GLCC, ESA CCI-LC and Ecoclimap Second Generation (Ecoclimap-SG from here onwards). As GLC2000 and Globcover do not include Antarctica, GLCC or ESA CCI-LC data can be used for the missing areas. The landuse executable also includes the TERRA-URB module, controlled by the logical switch l_terra_urb; see section 3.2.2 for details.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition_1","title":"Target grid definition","text":"

The definition of the target grid is done by reading the namelist INPUT_grid_org. This namelist contains the information about the grid type, which can either be ICON or COSMO. With the information about the grid type, the namelist containing the grid definition can be read. The name of the namelist must be changed manually by the user, according to the chosen grid type. The namelist must either be INPUT_ICON or INPUT_COSMO. For a more exact description of the target grid definition, read the subsection 'Target grid definition' in section 3.1. After specifying the grid definition the southern band of the target grid is defined. This information is important, as the two raw data sets GLC2000 and Globcover do not cover the region below 60 degrees south. If this region is desired by the user, the third data set must be considered for the domain below the southern band. Additionally the target fields for the land use data are allocated.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-landuse-data","title":"Raw landuse data","text":"

In a next step the namelist INPUT_LU is read. It contains an integer switch (i_landuse_data) that gives the possibility to choose between the five different raw data sets e.g., 1 (Globcover), 2 (GLC2000), 3 (GLCC), 5 (ESA CCI-LC), and 6 (Ecoclimap-SG). For Globcover one can additionally choose to use the corine landuse dataset by setting the logical switch (l_use_corine) to TRUE. Furthermore the path and the filename of the desired raw data and of GLCC are specified there. The user must adjust the filename and path manually according to the chosen raw data in i_landuse_data. In addition the name of the desired lookup table is read, which again can be chosen by the user using an integer switch ilookup_table_lu. The lookup tables are described in more detail in Table 5. The names of the buffer files for the target landuse fields and for the target GLCC fields are also specified in this namelist. Finally, the aforementioned l_terra_urb logical switch can be specified (the default value is .FALSE.).

After having read the namelists, the number of tiles of the raw data set is defined. The number of tiles is set to 1 as default and must only be changed for the raw data set Globcover or ESA CCI-LC, which are composed of 6 tiles. The basic information of the Globcover tiles, such as the latitude and longitude edges and the resolution is allocated according to the number of tiles. Later these variables are filled with the respective information, read from the NetCDF files directly.

For the remaining procedures the three different raw land use data have their separate routines, which are constructed identically.

The allocation of the data is done using the number of grid points in the latitudinal and longitudinal direction. Furthermore the land-use target fields are allocated using the target grid for the dimension size and the number of land-use classes. The land-use classes differ for the three raw data sets and are described in more detail in Table 4.

Data Set Number of Class Name of Class (Total number of Classes) GLOBCOVER (23) 01 irrigated croplands 02 rainfed croplands 03 mosaic cropland (50-70%) - vegetation (20-50%) 04 mosaic vegetation (50-70%) - cropland (20-50%) 05 closed broadleaved evergreen forest 06 closed broadleaved deciduous forest 07 open broadleaved deciduous forest 08 closed needleleaved evergreen forest 09 open needleleaved decid. or evergr. forest 10 mixed broadleaved and needleleaved forest 11 mosaic shrubland (50-70%) - grassland (20-50%) 12 mosaic grassland (50-70%) - shrubland (20-50%) 13 closed to open shrubland 14 closed to open herbaceous vegetation 15 sparse vegetation 16 closed to open forest regulary flooded 17 closed forest or shrubland permanently flooded 18 closed to open grassland regularly flooded 19 artificial surfaces 20 bare areas 21 water bodies 22 permanent snow and ice 23 undefined Corine (23) Corine (23) (CLC: 2.1.2, 2.1.3) 11 irrigated croplands (CLC: 2.1.1) 14 rainfed croplands (CLC: 2.4.2, 2.4.3) 20 mosaic cropland (50-70%) - vegetation (20-50%) (CLC: 2.4.4) 30 mosaic vegetation (50-70%) - cropland (20-50%) 40 closed broadleaved evergreen forest (CLC: 3.1.1) 50 closed broadleaved deciduous forest 60 open broadleaved deciduous forest (CLC: 3.1.2) 70 closed needleleaved evergreen forest (CLC: 1.4.1) 90 open needleleaved decid. or evergr. forest (CLC: 3.1.3) 100 mixed broadleaved and needleleaved forest (CLC: 2.2.3, 3.2.4) 110 mosaic shrubland (50-70%) - grassland (20-50%) (CLC: 2.2.2, 3.2.2) 120 mosaic grassland (50-70%) - shrubland (20-50%) (CLC: 2.2.1) 130 closed to open shrubland (CLC: 2.3.1, 3.2.3) 140 closed to open herbaceous vegetation (CLC: 3.2.1) 150 sparse vegetation 160 closed to open forest regulary flooded (CLC: 4.1.2) 170 closed forest or shrubland permanently flooded (CLC: 4.1.1) 180 closed to open grassland regularly flooded (CLC: 1.1.1, 1.1.2, 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.3.3, 1.4.2) 190 artificial surfaces (CLC: 3.3.1, 3.3.2, 3.3.3, 3.3.4, 1.3.1, 1.3.2) 200 bare areas (CLC: 4.2.1, 4.2.2, 4.2.3, 5.1.1, 5.1.2, 5.2.1, 5.2.2, 5.2.3) 210 water bodies (CLC: 3.3.5) 220 permanent snow and ice (CLC: 9.9.9) 230 undefined GLC2000 (23) 01 evergreen broadleaf tree 02 deciduous broadleaf tree closed 03 deciduous broadleaf tree open 04 evergreen needleleaf tree 05 deciduous needleleaf tree 06 mixed leaf tree 07 fresh water flooded tree 08 saline water flooded tree 09 mosaic tree / other natural vegetation 10 burnt tree cover 11 evergreen shrubs closed-open 12 deciduous shrubs closed-open 13 herbaceous cover closed-open 14 sparse herbaceous or grass 15 flooded shrub or herbaceous 16 cultivated and managed areas 17 mosaic crop/tree/natural vegetation 18 mosaic crop/shrub or grass 19 bare areas 20 water bodies 21 snow and ice 22 artificial surfaces 23 undefined GLCC (24) 01 urban and built-up land 02 dryland cropland and pasture 03 irrigated cropland and pasture 04 mixed dryland/irrigated 05 cropland/grassland mosaic 06 cropland/woodland mosaic 07 grassland 08 shrubland 09 mixed shrubland/grassland 10 savanna 11 decidous broadleaf forest 12 decidous needleleaf forest 13 evergreen broadleaf forest 14 evergreen needleleaf forest 15 mixed forest 16 water bodies 17 herbaceous wetland 18 wooded wetland 19 barren or sparsely vegetated 20 herbaceous tundra 21 wooded tundra 22 mixed tundra 23 bare ground tundra 24 snow or ice Ecoclimap-SG (33) 01 sea and oceans 02 lakes 03 rivers 04 bare land 05 bare rock 06 permanent snow 07 boreal broadleaf deciduous 08 temperate broadleaf deciduous 09 tropical broadleaf deciduous 10 temperate broadleaf evergreen 11 tropical broadleaf evergreen 12 boreal needleleaf evergreen 13 temperate needleleaf evergreen 14 boreal needleleaf deciduous 15 shrubs 16 boreal grassland 17 temperate grassland 18 tropical grassland 19 winter C3 crops (lower T) 20 summer C3 crops 21 C4 crops (warmer environments) 22 flooded trees 23 flooded grassland 24 LCZ1: compact high-rise 25 LCZ2: compact midrise 26 LCZ3: compact low-rise 27 LCZ4: open high-rise 28 LCZ5: open midrise 29 LCZ6: open low-rise 30 LCZ7: lightweight low-rise 31 LCZ8: large low-rise 32 LCZ9: sparsely built 33 LCZ10: heavy industry

Table 4: Land-use classes for the different raw data sets. The Corine LandCover (CLC) classes in the left column indicate how the CLC is mapped to the corresponding GlobCover class.

After the allocation of the data a check is performed to query, if the user desires a domain that goes beyond the southern bound of the raw data. If it is the case, the GLCC target fields are allocated as well.

In case that Globcover is used, the grid for the single tiles must be defined as well.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-raw-land-use-data-to-the-target-field","title":"Aggregation of the raw land-use data to the target field","text":"

The definition and allocation part is done and the most important part, the aggregation of the raw data to the target grid can be performed. In order to be able to aggregate the data, the lookup table must first be initialized. The initial values differ for the various settings listed in Table 5. Also the name of the lookup table must be defined using the integer numbers specified in the namelist INPUT_LU. The integer number are listed together with their associated lookup table names in Table 5.

Raw Data Integer Setting Name of the lookup table GLOBCOVER 1 operational settings Asensio, 2011 2 experimental settings, analog to lookup tables of ECOCLIMAP Asensio, 2010 GLC2000 1 operational settings of GME Ritter, 2007 2 operational settings of COSMO Heise, 2005 3 experimental settings, analog to lookup tables of ECOCLIMAP Asensio, 2010 GLCC 1 operational settings of GME Ritter, 2007 2 operational settings of COSMO Heise, 2005 3 experimental settings, analog to lookup tables of ECOCLIMAP Asensio, 2010 ESA CCI-LC 1 experimental settings Helmert, 2019 Ecoclimap-SG 1 Globcover analogue with added LCZs from Oke

Table 5: Names of the lookup tables and the different possible settings for each raw land-use data set.

The following paragraphs describe computations on the raw data grid.

For GLC2000 and GLCC, the raw data is read in lines of a complete longitude going from 180 degrees east to 180 degrees west, through a loop over the latitude. Before any calculation is performed, it is tested if the value of the latitude is contained inside the targed domain. In case it is not, the loop is cycled. Reading of the data line-wise can be done from the NetCDF file directly.

Using the routine find_nearest_target_grid_element each raw data pixel is assigned to a target grid point. A more precise description and a figure that describes the procedure can be found in paragraph 'Aggregation of the raw topography to the target grid' and in Fig. 5 in section 3.1.

As Globcover and ESA CCI-LC are composed of six tiles, the reading of the raw data must be performed in a different way than for the other three data sets. The reading of the data for Globcover is done in the same way as for the topography. Compare the paragraph 'Aggregation of the raw topography to the target grid' in section 3.1. As there is no need to calculate gradients for the land use, the corresponding variable, which contains three lines of raw data, is not used.

The lookup table is then fed with the land use class, which gives a value for all the target fields listed in Table 6.

Variable long name Variable short name Fraction Land FR_LAND Ice fraction FR_ICE Plant cover maximum PLCOV_MX Plant cover minimum PLCOV_MN Leaf area index maximum LAI_MX Leaf area index minimum LAI_MN Minimal stomata resistance RS_MIN Urban area fraction URBAN Fraction of deciduous forest FOR_D Fraction of evergreen forest FOR_E Longwave surface emissivity EMISS_RAD Root depth ROOTDP Roughness length Z0

Table 6: The variables that are computed using the raw land-use data.

The number of grid points that fall into the same target grid and land use class are summed up. The values of the target fields are weighted with the whole pixel area and summed up. Except for the emissivity, which is the only land-use parameter that also has valid values over water, only land pixels are considered. Values that depend on the plant cover, such as PLCOV_MX, PLCOV_MN, LAI_MN, LAI_MX, RS_MIN, FOR_E, FOR_D, ROOTDP and z0, are weighted with the plant cover maximum in addition to the pixel area.

The following paragraphs describe computations on the target grid.

The total area and the land area of each target grid point is first defined. Then the weighted sums of the target fields derived in the previous step are normalized to obtain the definite values. The emissivity and the number of land use classes are normalized by the total area to obtain the correct emissivity and area fraction of each land use class. The other parameters are only considered if the area_land is larger than zero: FR_LAND and FR_ICE are normalized with the total area, URBAN, FOR_D, FOR_E, PLCOV_MN and PLCOV_MX are normalized by the land area, the ROOTDP, LAI_MN, LAI_MX and RS_MIN are normalized by the area covered by plants. If only sea pixels are found, all the fields are undefined.

Finally land-use classes are defined for target grid points that do not contain any raw data pixel. In contrary to the topography, where a bilinear interpolation is performed, here the nearest neighbor is searched. The associated land use class is used with the lookup tables, and the target fields are defined.

The target fields are written to a NetCDF buffer file, which can later be used for the consistency check. There is a file for the chosen land use data set, and one, if needed at all, for the GLCC land use data. Finally the allocated memory is deallocated again.

"},{"location":"user_manual/user_manual_03_fortran_modules/#terra_urb","title":"TERRA-URB","text":"

NOTE: currently the TERRA-URB module in EXTPAR only works with the Ecoclimap-SG database, as this is the only database available for extpar with an LCZ map.

The executable extpar_landuse_to_buffer also includes the TERRA-URB module, controlled by the logical switch l_terra_urb. This module uses a 2D map of local climate zones (LCZ) to determine a set of urban canopy variables used by TERRA-URB in COSMO/ICON, see Table 7. The module aggregates the variables and outputs them to the lu_buffer_file. The aggregation procedure follows that of the other land use variables described in the previous sections. The TERRA-URB related variables then pass through the subprogram extpar_consistency_check (see section 3.7) and are written out to the final extpar file for both COSMO and ICON. ICON would typically ignore these fiels and just use the information from the LU_CLASS_FRACION field, as is done for other land use variables, except for when ntiles=1 in which case it needs the 2D fields. The ISA and AHF EXTPAR modules must be turned off when running with l_terra_urb=.true, as these fields are computed within the TERRA-URB module. The code for this module is based upon Matthias Demuzere's WUDAPT-to-COSMO [@Varentsov2020] and Handrik Wouters' SURY [@Wouters2016] codes. The LCZ look-up tables are based on the values published in [@Stewart2012; @Stewart2014].

Variable name Description FR_URBAN Urban area fraction ISA Impervious surface area AHF Anthropogenic heat flux FR_PAVED Fraction of impervious surface area URB_FR_BLD Urban building fraction URB_H_BLD Urban building height URB_H2W Urban canyon height to width ratio URB_ALB_SO Urban shortwave (solar) albedo URB_ALB_TH Urban thermal albedo URB_EMIS Urban emissivity URB_HCON Urban mean heat conductivity URB_HCAP Urban mean heat capacity

Table 7: Varialbes provided by the TERRA-URB module

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_1","title":"Used namelist files and data in-/output","text":"
  • namelists files:

    • INPUT_grid_org
    • INPUT_COSMO_GRID
    • INPUT_ICON_GRID
    • INPUT_LU
  • data input:

    • GLC2000_byte.nc, GLCC_usgs_class_byte.nc
    • CORINE_globcover.nc
    • GLOBCOVER_0_16bit.nc - GLOBCOVER_5_16bit.nc
    • ECCI_300m_0.nc - ECCI_300m_5.nc
    • ECOCLIMAP_SG.nc
  • Output:

    • buffer file with landuse data (/lu_io_extpar/ lu_buffer_file)
    • buffer file with GLCC data (/glcc_io_extpar/ glcc_buffer_file)
"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_aot_to_buffer","title":"extpar_aot_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_2","title":"Short description","text":"

The executable extpar_aot_to_buffer aggregates aerosol optical thickness data to the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition_2","title":"Target grid definition","text":"

The definition of the target grid is again done using the namelist INPUT_grid_org. As the subroutines are exactly the same as the ones used in extpar_topo_to_buffer, it is referred to the subsection 'Target grid definition' in section 3.1, where the procedure is explained in more detail.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-aerosol-optical-depth-data","title":"Raw aerosol optical depth data","text":"

The namelist INPUT_AOT is kept very simple. It contains only the path and the name of the raw aerosol optical depth data. The integer switch (iaot_type) informs EXTPAR which of the 4 available datasets has been chosen: 1 (Tegen), 2 (AeroCom), 3 (MACC-II), 4 (MACv2) or 5 (CAMS) . Additionally, also the filenames of the buffer and output files for the aggregated data is specified.

In order to allocate the variables used to read the raw data, the dimensions of the raw data is defined. These dimensions include the number of rows and columns of the NetCDF raw data file, the number of months, which is equal to 12, as a full yearly cycle is described, and the number of types of aerosols contained in the raw data file. This number is 5 for iaot_type=1,2 or 3 , as the raw data file contains the aerosol optical thickness information of black carbon, dust, organic matter, sulfate and sea salt. iaot_type=4 is used for a new formulation of the radiation-aerosol interaction available only in version of COSMO later than 5.04. This provides data of the aerosol optical thickness, the single scattering albedo and the asymmetry factor for the 8 spectral bands defined in the RG92 radiation scheme. iaot_type=5 is used only for ICON model. The raw data file contains the layer-integrated mass information of 11 types of aerosols: Sea Salt (3 bin), Mineral Dust (3 bin), hydrophilic and hydrophobic organic matter, hydrophilic and hydrophobic black carbon and sulfate. Also the raw data file contains the pressure for 60 vertical levels. The 3 first data-sets which provide raw data for different aerosol types refer to Tegen1, AeroCom2 and MACC-II3 whereas the fourth data-set is derived from MACv24 and the fifth data-set is derived from CAMS5.

In a next step, the complete raw data is read into memory; this is possible since the aerosol optical depth raw data is of rather coarse resolution (see Table 8). Also, the grid of the raw data is determined from NetCDF meta data. Before the aggregation to the target grid can start, the target grid fields must be allocated, using the target grid, the number of months and aerosol types or spectral bands.

Raw data set resolution Tegen 4 x 5 degree AeroCom 1 x 1 degree MACC-II 1.125 x 1.125 degree MACv2 1 x 1 degree CAMS 3 x 3 degree x 60 levels

Table 8: Resolution of raw data-sets for aerosol optical depths.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-aerosol-optical-depth-to-the-target-field","title":"Aggregation of the aerosol optical depth to the target field","text":"

As the resolution of all raw data sets is so coarse, there is no need to go through the whole raw data set and find the corresponding target grid element. Here there is only one loop over the target grid. For every target grid element four surrounding raw data points are searched for. With these four points, a weight for the bilinear interpolation is computed. As the raw data grids of the 5 different aerosols are equal, the four surrounding points are the same for all months and aerosol types. Four new arrays (SW, SE, NE, NW) are then defined, which contain the four neighbor values, for each month and each type. These can now be used, together with the previously calculated weights, to calculate the bilinear interpolation.

Finally the data is saved in a NetCDF buffer and an output file, and the allocated variables are deallocated.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_2","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_AOT

  • data input: aot_GACP.nc, aod_AeroCom1.nc, aod_MACC_2003-2012.nc, aod_MACC_2003-2012_proc.nc, aot_MACv2.nc, aot_CAMS_2003-2013.nc

  • Output: buffer file with aerosol data (/aerosol_io_extpar/ aot_buffer_file)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_soil_to_buffer","title":"extpar_soil_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_3","title":"Short description","text":"

The executable extpar_soil_to_buffer aggregates soil data of the FAO Digital Soil Map of the World or of the Harmonized World Soil Data (HWSD) to the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition_3","title":"Target grid definition","text":"

The definition of the target grid is again done using the namelist INPUT_grid_org. As the subroutines are exactly the same as the ones used in extpar_topo_to_buffer, it is referred to the subsection 'Target grid definition' in section 3.1, where the procedure is explained in more detail.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-soil-data","title":"Raw soil data","text":"

The variables for the raw soil data are read from the namelist INPUT_SOIL. These variables are the path and the names of the raw data files and two switches to decide whether the FAO or the HWSD data should be used and if the deep soil data is desired or not. The integer switch isoil_data determines the raw data and processing used: 1 for FAO, 2 for the HWSD data-set6 and 3 for the use of HWSD data with mapping to TERRA soil types. The switch to choose the production of deep soil information is a logical (only applicable to isoil_data=2). Additionally, the names of the buffer files are specified. Be aware that a change of the integer switch from FAO to HWSD requires also the manual replacement of the raw data file names in the namelist.

After reading the namelist, a check is made on the production of subsoil characteristics. This is only supported for HWSD data, and a warning is issued in case of bad usage.

The dimensions of the raw soil data are defined, which include the number of grid points in the latitudinal and longitudinal direction, as well as the number of soil data code of the raw data. These values are needed to allocate the soil data with the proper size.

The mapping between raw data sets specific codes and some standard soil types is defined; this concerns the soil types undefined, default, ice and water.

As the soil data is provided in one single file, all data can be read in one shot. The data that are read from the NetCDF file are the texture and the slope of the soil data and the soil code. The aggregation of the data is done in a different way for the FAO and HWSD data, as these result in two completely different variables. Moreover, for HWSD data, to conserve memory, the topsoil data are allocated first and aggregated to the target grid, before the same is done for the subsoil.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-fao-and-hwsd-data-with-terra-mapping-to-the-target-grid","title":"Aggregation of the FAO and HWSD data with TERRA mapping to the target grid","text":"

The following paragraphs describe computations on the raw data grid.

The soil data is read using a loop over the latitude and the longitude. This results in a point-wise reading of the raw data. As soon as the point is read, its corresponding target grid element is defined. If the regular latitude/longitude grid point is not contained in the target grid, a new point is read. If however the point is inside the target grid, the aggregation can begin.

The number of raw data pixels is increased by one, if a raw data point can be assigned to a target grid point. This number is later used to define the fraction land defined by the soil data. The corresponding soil unit is deduced from the raw data. If the soil unit is zero, this is an ocean pixel and the number of sea points is increased by one. If the soil code differs from zero, the number of land points is increased by one. The soil code is then associated to either a special or a normal soiltype. For all the special soiltypes such as ice, rock, salt, histosols, dunes and no data flags the respective texture (coarse, medium, fine) are defined using a lookup table. All other soil units are described using the texture available in the raw data. These values define the final texture variable texture.

The following paragraphs describe computations on the target grid.

In the following a loop is opened over the target grid points. First of all the fraction land is defined using the number of land pixels minus the number of inland water pixels, which is then averaged by the number of raw data pixels that were available for the target grid element. In a next step the texture for every target grid element is defined. For the special soiltypes (texture larger than 900) the corresponding number is associated. For the normal soiltypes (texture smaller than 900) the texture is calculated as average of the summed up texture. The resulting texture value is multiplied by 100 and converted into an integer number. This number is used to associate the final soiltype to every target grid element. The soiltypes are described in more detail in table 9. For target grid points that do not contain any raw data points, the nearest neighbor in the raw data is defined. If the target grid point is outside the raw data grid the slope is defined as zero and the texture as undefined.

TERRA Code Soiltype raw data code 1 ice and glacier7 9001 2 rock, lithosols 9002 3 sand 9003 (salt), 9005 (shifting sands and dunes) and coarse texture 4 sandy loam coarse to medium texture 5 loam (default soiltype) 9009 (undefined), 9012 (dominant part undefined), medium texture 6 loamy clay medium to fine texture 7 clay fine texture 8 histosols (peat) 9004 9 water 9000 (undefined: inland water), -9 (undefined: ocean)

Table 9: TERRA soiltypes and their respective FAO raw data codes.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-hwsd-data-to-the-target-grid","title":"Aggregation of the HWSD data to the target grid","text":"

The aggregation starts again with a loop over the latitudes and longitudes. For each grid point a target grid element is looked for. If there is a target grid element, the aggregation can start. The soiltype is defined using the raw data value, if it is above zero, and zero otherwise. Additionally, all the ocean, land and lake points are counted in order to determine the land fraction which is calculated as the difference between the summed up land and lake points normalized by the number of raw data pixels available. For target grid points with no raw data, the nearest neighbor in the raw data is defined.

The resulting soiltype is not yet usable, as it contains numbers coded in a world code and not in TERRA soiltypes. This transformation is done in the consistency check, where the special soiltypes of the HWSD data, specified in Table 10, are packed in the variable SOILTYP the normal soiltypes are given in fractions of sand, silt, clay and organic carbon, and the bulk density is also given.

TERRA Code Soiltype TERRA Code Soiltype 1 ice and glacier 8 histosols (peat) 2 rock, lithosols 9 water 3 sand 10 alkali flat 4 sandy loam 11 shifting sand, dunes 5 loam (default soiltype) 12 Urban, human disturbed 6 loamy clay 225 Unknown 7 clay

Table 10: New TERRA soiltypes deduced from the HWSD data.

"},{"location":"user_manual/user_manual_03_fortran_modules/#output-of-the-soil-data","title":"Output of the soil data","text":"

The soiltypes and the fraction land, together with the undefined value, the latitudes and longitudes are saved in a NetCDF buffer file. This is later used to perform the consistency check, which is especially important for the HWSD data, as the main transformation of the data takes place there.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_3","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_SOIL

  • data input: FAO_DSMW_double.nc, FAO_DSMW_float.nc, HWSD0_30_topsoil.nc, HWSD30_100_subsoil.nc

  • Lookup tables for HWSD: LU_TAB_HWSD_UF.data, HWSD_DATA_COSMO.data, HWSD_DATA_COSMO_S.data

  • Output: buffer file with soil data (/soil_io_extpar/ soil_buffer_file)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_flake_to_buffer","title":"extpar_flake_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_4","title":"Short description","text":"

The executable extpar_flake_to_buffer aggregates lake depth data and lake fraction to the target grid.

"},{"location":"user_manual/user_manual_03_fortran_modules/#target-grid-definition_4","title":"Target grid definition","text":"

The definition of the target grid is again done using the namelist INPUT_grid_org. As the subroutines are exactly the same as the ones used in extpar_topo_to_buffer, it is referred to the subsection 'Target grid definition' in section 3.1, where the procedure is explained in more detail.

"},{"location":"user_manual/user_manual_03_fortran_modules/#raw-lake-data","title":"Raw lake data","text":"

As only the target grid dimensions are needed to allocate the target fields, this is done right after the definition of the target grid. Then the namelist INPUT_FLAKE is read to define the path and the filename of the raw lake data. Also the names of the buffer and the output file for the consistency check are given. Once more the dimensions of the raw data are needed to allocate the raw data correctly; these dimensions are deduced from the netcdf file directly and the raw data grid is defined.

"},{"location":"user_manual/user_manual_03_fortran_modules/#aggregation-of-the-lake-data-to-the-target-grid","title":"Aggregation of the lake data to the target grid","text":"

The following paragraphs describe computations on the raw data grid.

The data is read row-wise, through a loop over the latitudes, shipping all latitudes not inside the user specified domain. If a row is kept, a new loop over the longitudes is started to treat the raw data point-wise. For each point, the corresponding target field element is defined. This is done in the same way described in the subsection 'Aggregation of the topography to the target grid' in section 3.1 and Fig. 5. The number of raw data pixels that contribute to the target grid value are summed up as well as the lake depth, which is multiplied by a scale factor deduced from the area of each pixel that contributes to a lake fraction.

The following paragraphs describe computations on the raw data grid.

The lake fraction is derived and the lake depth is obtained by normalizing the weighted sum previously computed. Where no lake depth is available the value is set to undefined (-1). In case that no raw data pixel is available the nearest neighbor in the raw data is searched for.

The target fields are then written to a netcdf buffer and output file. Finally the allocated memory can be released.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_4","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_FLAKE

  • data input: GLDB_lakedepth.nc

  • Output: buffer file with flake data (/flake_io_extpar/ flake_buffer_file)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_hwsdART_to_buffer","title":"extpar_hwsdART_to_buffer","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_5","title":"Short description","text":"

This program processes HWSD (Harmonized World Soil Database) data and aggregates it onto a target grid.

The code is a module named \"mo_agg_hwsdART\" that contains a subroutine called \"agg_hwsdART_data_to_target_grid\". This subroutine is used to aggregate data from the HWSD dataset to a target grid. The HWSD dataset contains soil unit information classified according to the USDA soil classification system.

The module uses several other modules, including \"mo_logging\" for logging purposes, \"mo_kind\" to define kind parameters, \"mo_hwsdART_data\" to define the different soil types according to the USDA classification, \"mo_hwsdART_tg_fields\" to define variables related to the target grid, and \"mo_grid_structures\" to define grid structures.

The subroutine takes input parameters including the target grid structure (\"tg\"), the HWSDART soil unit data (\"hwsdART_soil_unit\"), the grid of HWSDART data (\"hwsdART_grid\"), and the longitude and latitude coordinates of the HWSDART grid (\"lon_hwsdART\" and \"lat_hwsdART\").

The subroutine initializes local variables and arrays to store the counts of different soil types in each grid element of the target grid. It also sets an undefined integer value and initializes the count of raw data pixels to zero.

The subroutine then iterates over the HWSDART grid and finds the nearest target grid element for each raw data pixel using the \"find_nearest_target_grid_element\" function. If the raw data pixel is out of the range of the target domain, it is skipped.

For each valid raw data pixel, the subroutine counts the number of raw data pixels in the target grid element and increments the count for the corresponding soil type in the local arrays.

After the iteration over the HWSDART grid, the subroutine iterates over the target grid to calculate the fraction of each soil type in each grid element. It divides the count of each soil type by the total number of raw data pixels in the grid element and stores the fractions in the corresponding variables.

The code aggregates the HWSD soil data in USDA scheme to a target grid, calculating the fraction of each soil type in each grid element for application in ICON-ART simulations.

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_5","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_ICON_GRID, INPUT_hwsdART

  • data input: HWSD0_USDA.nc

  • Output: buffer file with fraction of soil type classes (hwsdART_extpar_ICON.nc)

"},{"location":"user_manual/user_manual_03_fortran_modules/#extpar_consistency_check","title":"extpar_consistency_check","text":""},{"location":"user_manual/user_manual_03_fortran_modules/#short-description_6","title":"Short description","text":"

The extpar_consistency_check is performed after all raw data have been aggregated to the target grid to remove any inconsistencies that may appear among the different data and to derive additional information using multiple raw data sources.

"},{"location":"user_manual/user_manual_03_fortran_modules/#reading-of-namelists","title":"Reading of namelists","text":"

Before the grid is defined, the namelists INPUT_RADTOPO, INPUT_ORO and INPUT_SOIL are read to obtain the settings of the different switches that are used (e.g. lradtopo, itopo_type, lsso_param, isoil_data, ldeep_soil). Then the namelist INPUT_grid_org is read to obtain the target grid information and the grid type.

In a next step the INPUT_LU is read by extpar_consistency_check to check if the GLCC data set is required, which is the case if the target grid domain reaches more to the south than the chosen raw land-use data set. (Globcover and GLC_2000 are not global.)

If the namelist INPUT_ERA is present (indicating that one uses the ERA climatologies generated by extpar_era_to_buffer) the buffer file name is retrieved. If this namelist is not present (legacy climatologies from ICON-REMAP-TOOL are used), the buffer file names in INPUT_CHECK are read. After that step, all other namelists of the EXTPAR modules are read in order to retrieve the buffer file name for each data set. These files are read and all the variables needed for the final external parameters file are allocated.

An additional namelist that is used is INPUT_CHECK, it contains a couple of switches to define the processing in the consistency check.

The first task after reading the namelists is to derive the correct land sea mask from the land use data. If the GLCC data must be used, the land sea mask below the southern band is deduced from GLCC.

Then the total roughness length is computed as the sum of the roughness length deduced from the land-use and the topography.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-for-water-and-ice-pixels","title":"Consistency check for water and ice pixels","text":"

The definition of a water grid element is based on the land-use data. The vegetation is set to zero for all water grid elements and FAO derived soil type is set to water. For non water pixels with undefined or invalid soil type, the FAO derived soil type is either set to default, which is loam, or to ice for regions that are below 60 degrees south (where only Antarctica is located).

All the points that are classified as ice in the land-use data but not in the FAO derived soil type, are changed to ice in the latter; the vegetation of these pixels is set to zero.

The HWSD derived soiltype needs a transformation from the world code to the TERRA code, which is performed here. The world code is decoded with the TERRA HWSD lookup table, to define the regions that contain a special soiltype (see the special soiltypes in Table 10). For each grid point the world code is associated to the single fractions of the soil composition, using an other lookup table. If there is a point that does not contain a bulk density it is calculated using the formula of the cultivated topsoil or the compact subsoil from Hollisa et al. (2012)8 and Woesten et al. (1999)9. Furthermore there is a special treatment of peat with histosols. The whole procedure is also done for the subsoil, if it is desired at all.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-lake-data","title":"Consistency check of lake data","text":"

Water grid points are either declared as lake or ocean, thus over land a fraction lake and over the ocean a fraction ocean is defined. Where the fraction land deduced from the topography is smaller than 0.99 the fraction ocean is defined. All the other points are used to determine the fraction lake. Both fractions are defined such that fr_lake or fr_ocean plus fr_land_lu (fraction land deduced from land-use) sum up to one. Some smaller seas must be defined manually, thus for the region of the Dead Sea and the Caspian Sea not fraction lake but fraction ocean is calculated.

For fr_land 10 and fr_ocean 11 larger than a half, the lake depth is set to undefined. A default value for the lake depth is used for grid elements with a lake fraction 12 larger than a half and a negative lake depth. Additionally a maximum and minimum lake depth is defined. Included is also a manual correction of the depth of Lake Constance.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-albedo-data","title":"Consistency check of albedo data","text":"

The consistency check of the albedo data concerns land pixels that have a albedo smaller than 0.07. For these pixels a weighted bilinear interpolation is performed. Only land points are used for the interpolation, if there is no surrounding land point a warning message is printed. Values that are still too small receive a soiltype dependent albedo. This is done for all three wavelengths.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-ndvi-data","title":"Consistency check of NDVI data","text":"

The next consistency check is performed with the normalized difference vegetation index (NDVI). The NDVI values are set to undefined for water grid points. Additionally, values that are smaller than a predefined value are set to exactly this value.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-the-temperature-climatology","title":"Consistency check of the temperature climatology","text":"

The consistency check of the temperature climatology contains a height correction and is only performed for the finer resolved temperature climatology (e.g. it_cl_type = 1). The temperature is set to undefined for all the sea points. For land points that have a valid temperature, it is adjusted to the height. This is done by considering a constant temperature rate of 0.65 K per 100m:

\\(\\frac{dT}{dh} = -\\frac{0.65 K}{100 m}\\).

Target points that do not contain temperature values larger than zero are filled with surrounding values. First a valid point is looked for in the surrounding \\(3\\times3\\) grid box. If still no valid point can be found, it is searched along the longitude, and if nothing else helps the nearest neighbor is tried.

"},{"location":"user_manual/user_manual_03_fortran_modules/#consistency-check-of-all-other-fields","title":"Consistency check of all other fields","text":"

All other fields are assumed to be independent and are written to the output file exactly as they were read in. A special treatment applies to the ISA, AHF, EMISS and S_ORO fields. Whenever their respective namelist input file is missing in the working directory where extpar_consistency_check is executed these fields are not added to the output file. An exception to this rule applies to the ISA and AHF fields which are added to the output file if the logical switch l_terra_urb is set to .TRUE. in the INPUT_LU namelist; see section 3.2.2 for more details.

"},{"location":"user_manual/user_manual_03_fortran_modules/#definition-of-special-points","title":"Definition of special points","text":"

Be aware that the definition of special points has only been tested for the COSMO grid and can only be used if the FAO raw soil type is used. At the moment there are three special points (1: Falkenberg, 2: Waldstation, 3: Lindenberg). At each of these points, values for soiltype_sp, z0_sp, rootdp_sp, plcovmn_sp, plcovmx_sp, laimn_sp, laimx_sp can be explicitly set by the user. The coordinates of the special point are also user specified. If no special treatment at these points is desired the number_special_points must be set to zero (see Table 11). If no special treatment is desired at all, the integer switch i_lsm_treatment can be set to 1 instead of 2.

number_special_points Treatment of special points 0 NO treatment of special points 1 special treatment of Falkenberg 2 special treatment of Falkenberg and Waldstation 3 special treatment of Falkenberg, Waldstation and Lindenberg

Table 11: Usage of the namelist parameter number_special_points.

"},{"location":"user_manual/user_manual_03_fortran_modules/#reduced-main-memory-usage","title":"Reduced main memory usage","text":"

Since Exptar Version 5.4 a new feature was introduced which allows the running of extpar_consistency_check for very high resolution global grids without any restrictions on the hardware memory specifications. A POSIX mmap based implemetation of disk caching arrays is used to use main memory as much as possible and, if more memory is required, the duty to handle this request is delegated to the kernel. A requirement to run this properly is the provision of swap space in the expected total memory use. With this technique we could process a global R2B11 ICON grid (around 1.25 km grid resolution) on a server with 256 GB main memory. Of course processing gets quite slow, but is still in the order of a couple of cups of coffee.

The feature can be enabled with the namelist variable l_use_array_cache = .TRUE. in namelist extpar_consistency_check_io. The namelist variable default is l_use_array_cache =.FALSE., which is selecting the standard heap allocation by Fortran's ALLOCATE statement.

"},{"location":"user_manual/user_manual_03_fortran_modules/#writing-output","title":"Writing output","text":"

The final results are written into a netcdf file. The output file name can be specified in the namelist INPUT_CHECK.

Since EXTPAR Version 5.4 the output possibilities have been extended for ICON only. The EXTPAR output procedure for COSMO did not change with Version 5.4. As ICON and a lot of its associated tools (eg. CDO, DWD icontools) are already using a single abstract interfacing library CDI, a re-implementation for the final EXTPAR output procedure with CDI to prepare for future developments is provided. Note, that this re-implementation replaces the former writing-routine completely. For a detailed description of CDI look at https://code.mpimet.mpg.de/projects/cdi .

"},{"location":"user_manual/user_manual_03_fortran_modules/#used-namelist-files-and-data-in-output_6","title":"Used namelist files and data in-/output","text":"
  • namelists files: INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID, INPUT_CHECK, INPUT_

  • data input: all buffer files from the EXTPAR modules defined in the INPUT_ namelist files

  • data output: netCDF containing all external parameters (/extpar_consistency_check_io/ netcdf_output_filename)

  1. Tegen, I., P. Hollrigl, M. Chin, I. Fung, D. Jacob, and J. Penner 1997. Contribution of different aerosol species to the global aerosol extinction optical thickness: Estimates from model results. J. Geophys. Res., 102, 23895-23915.\u00a0\u21a9

  2. Kinne, S., M. Schulz, C. Textor, S. Guibert, Y. Balkanski, S.E. Bauer, T. Berntsen, T.F. Berglen, O. Boucher, M. Chin, W. Collins, F. Dentener, T. Diehl, R. Easter, J. Feichter, D. Fillmore, S. Ghan, P. Ginoux, S. Gong, A. Grini, J. Hendricks, M. Herzog, L. Horowitz, I. Isaksen, T. Iversen, A. Kirkev\u00e5g, S. Kloster, D. Koch, J.E. Kristjansson, M. Krol, A. Lauer, J.F. Lamarque, G. Lesins, X. Liu, U. Lohmann, V. Montanaro, G. Myhre, J. Penner, G. Pitari, S. Reddy, \u00d8. Seland, P. Stier, T. Takemura, and X. Tie: An AeroCom initial assessment optical properties in aerosol component modules of global models, Atmos. Chem. Phys., 6, 1815-1834, 2006.\u00a0\u21a9

  3. Morcrette, J.-J., O. Boucher, L. Jones, D. Salmond, P. Bechtold, A. Beljaars, A. Benedetti, A. Bonet, J. W. Kaiser, M. Razinger, M. Schulz, S. Serrar, A. J. Simmons, M. Sofiev, M. Suttie, A. M. Tompkins, and A. Untch, 2009: Aerosol analysis and forecast in the ECMWF Integrated Forecast System. Part I: Forward modelling, J. Geophys. Res., 114D, D06206,doi:10.1029/2008JD011235\u00a0\u21a9

  4. Kinne, S., D. O'Donnel, P. Stier, S. Kloster, K. Zhang, H. Schmidt, S. Rast, M. Giorgetta, T. F. Eck, and B. Stevens (2013), MAC-v1: A new global aerosol climatology for climate studies, J. Adv. Model. Earth Syst., 5, 704--740, doi:10.1002/jame.20035.\u00a0\u21a9

  5. Bozzo, A., Benedetti, A., Flemming, J., Kipling, Z., R\u00e9my, S. (2020). An aerosol climatology for global models based on the tropospheric aerosol scheme in the Integrated Forecasting System of ECMWF. Geoscientific Model Development, 13(3), 1007-1034.\u00a0\u21a9

  6. Release 5.0 of COSMO and 2.0 of INT2LM do not support HWSD data, as the representation of the soil associated with this new data set has changed and is based on the use of pedotransfer functions and on fraction of soil components (e.g. clay, silt, ...)\u00a0\u21a9

  7. Soiltypes written in bold indicate a special soiltype.\u00a0\u21a9

  8. J.M. Hollisa, J. Hannamb and P.H. Bellamyb, February 2012, Empirically-derived pedotransfer functions for predicting bulk density in European soils, European Journal of Soil Science, 63, 96109 doi: 10.1111/j.1365-2389.2011.01412.x\u00a0\u21a9

  9. J.H.M. Woesten, A. Lilly, A. Nemes and C. Le Bas, Development and use of a database of hydraulic properties of European soils, Geoderma, Volume 90, Issues 34, July 1999, Pages 169-185, doi: 10.1016/S0016-7061(98)00132-3.\u00a0\u21a9

  10. derived from the land use data\u00a0\u21a9

  11. derived from the land use data\u00a0\u21a9

  12. derived from the lake data set\u00a0\u21a9

"},{"location":"user_manual/user_manual_04_python_modules/","title":"Python Modules","text":""},{"location":"user_manual/user_manual_04_python_modules/#General","title":"General Workflow","text":"

The general workflow of all Python modules is the same. An exemplary workflow of the Python modules is described below:

At the beginning of the program information about the environment on which EXTPAR is running is written to the logfile and all left-overs from prior executions of the same EXTPAR module are deleted. In a next step each parameter from the namelist namelist.py is checked for correctness as well as assigned to an internal variable for later use in the program. The specifaction about the target grid is directly read from the Fortan namelist-files INPUT_grid_org. The next step in the modules involves the generation of all necessary meta-data for the buffer files and the write of a namelist files in the style of a Fortran namelist, containing all information needed for the consistency_check at the end. In case of a COSMO target grid, a grid specification file is written, that is later used by CDO for the interpolation.

After this is all setup, the most compute-intensive parts like the remapping to the target grid or data modifications are done using CDO. The Python program launches a subshell executing the CDO in it. The output from CDO is reshaped in order to fit the dimensions of the buffer files. After the reshape, the fields and its corresponding metadata is written to a netCDF buffer file. The last step of the programme again deletes all intermediate netCDF or other files written during runtime, that do not serve any purpose.

Module-specific modifications or additional computations are described in the paragraph Data processing of each Python module.

"},{"location":"user_manual/user_manual_04_python_modules/#namelist","title":"Namelist","text":"

The namelist namelist.py contains the Python dictionaries input_alb, input_tclim, input_emiss, input_ndvi, input_ahf, input_isa and input_edgar. These dictionaries replace their corresponding Fortran namelist files INPUT_.

input_alb provides information about the albedo data type and the paths and filenames of the input/output data.

input_tclim contains a switch to determine the type of data (coarse or fine) as well as the paths and filenames of the input/output data.

input_emiss contains a switch to determine the type of emissivity data (full range or long-wave) and the filename and paths of the input/output data.

input_ndvi only provides information about the the path and the filenames of the input/output data.

input_era only provides information about the the path and the filenames of the input/output data.

input_isa contains a switch determine the type of ISA data and provides information about the the path and the filenames of the input/output data.

input_ahf contains a switch determine the type of AHF data and provides information about the the path and the filenames of the input/output data.

input_edgar only provides information about the the path and the filenames of the input/output data.

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_alb_to_buffer","title":"extpar_alb_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_alb_to_buffer","title":"Short description of the subprogram extpar_alb_to_buffer","text":"

The executable extpar_alb_to_buffer allows the aggregation of two different kinds of albedo data to the target grid. The first kind is a climatology of monthly values of total albedo derived from MODIS satellite data for the 3 spectral bands visible, near infrared and ultraviolet. The second kind contains information for soil albedo only in dry and saturated conditions. It originates from the Community Land Model1.

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing","title":"Data processing","text":"

The data is remapped to the target grid using the distance-weighted average interpolation. CDO first generates the weights for the interpolation from one of the input files and then applies these weights to all input files. After the interpolation took place, all values in the range of -100000 - 0.02 are set to 0.02 to prevent unrealistic data-points. All other steps in extpar_alb_to_buffer are following the general workflow of the Python scrips.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output","title":"Used namelist files and data in-/output","text":"
  • namelist files: namelist.py (dict: input_alb), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_ALB

  • data input: month_alb.nc, month_alnid.nc, month_aluvd.nc, global_soil_albedo.nc

  • data output: buffer file with albedo data (input_alb: alb_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_cru_to_buffer","title":"extpar_cru_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_cru_to_buffer","title":"Short description of the subprogram extpar_cru_to_buffer","text":"

The executable extpar_cru_to_buffer aggregates the temperature climatology of the Climate Research Unit (CRU) to the target grid. The namelist namelist.py gives the information of the path and the name of the raw temperature climatology data file. Additionally, the filename for the buffer is provided. There is an integer switch (it_cl_type), which allows the choice between a newer higher resolved data set for land surfaces only (1) and an older coarser raw data set for sea surfaces in combination with the higher resolved data set over land (2). Aggregation of the coarse data set over land surfaces is no longer supported since EXTPAR Version 5.4.

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing_1","title":"Data processing","text":"

The data processing with CDO for it_cl_type = 1 involves 4 steps:

  1. Set seapoints in the data to missing value.

  2. Extract the fields HSURF from the fine data set.

  3. Merge the fields from step 1 and step 2.

  4. Remap data from step 3 to the target grid using distance-weighted average interpolation.

The data processing with CDO for it_cl_type = 2 involves 5 steps:

  1. Convert coarse data from Celsius to Kelvin, calculate yearly mean values and remap coarse data to the grid of the higher resolved data set.

  2. Take landpoints from the fine data set and the seapoints from the data processed in step 1.

  3. Extract surface height from the buffer file of extpar_topo_to_buffer

  4. Smooth data processed in step 2 and remap to target grid using distance-weighted average interpolation.

  5. Correct data processed in step 4 with the surface height extracted in step 3.

All subsequent processing on the data follows the general workflow of the Python scripts.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_1","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_tclim), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_TCLIM

  • data input: absolute_hadcrut3.nc, CRU_T2M_SURF_clim.nc, CRU_T_SOIL_clim.nc, orography_buffer_file (it_cl_type = 2 only)

  • Output: buffer file with CRU data (input_tclim: t_clim_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_emiss_to_buffer","title":"extpar_emiss_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_emiss_to_buffer","title":"Short description of the subprogram extpar_emiss_to_buffer","text":"

The executable extpar_emiss_to_buffer aggregates CAMEL (Combined ASTER and MODIS Emissivity for Land) data to the target grid. For the aggregation of the emissivity the namelist namelist.py provides the path and the file name of the input data. The buffer file name is defined as well. There exists the integer switch (iemiss_type) to determine whether one wants to use the broad band emissivity for the 3.6 and 14.3 micron spectral range (1) or the broad band emissivity between 8.0 and 13.5 micron spectral range (2).

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing_2","title":"Data processing","text":"

After the generation of the interpolation weights artificial low values below 0.5 are set to -999. In a subsequent processing step -999 is set to the value for missing data. In order to not have missing data in the field to interpolate, all missing values are set to the values of its nearest neighbour. The last step involves the first order conservative interpolation to the target grid. After the remapping with CDO two additional fields are computed:

  • EMISS_MAX, the maximum EMISS value over 12 months

  • EMISS_MRAT, the monthly ratio with respect to the maximum EMISS

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_2","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_emiss) INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_EMISS

  • data input: CAM_bbe_full_2010-2015\u1e45c or CAM_bbe_lw_2010-2015\u1e45c

  • Output: buffer file with CAMEL data (input_emiss: emiss_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_ndvi_to_buffer","title":"extpar_ndvi_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_ndvi_to_buffer","title":"Short description of the subprogram extpar_ndvi_to_buffer","text":"

The executable extpar_ndvi_to_buffer aggregates NDVI data (Normalized Differential Vegetation Index) to the target grid. The namelist namelist.py only contains the path and the file name of the raw NDVI data. No other parameters can be set.

For the aggregation of the normalized differential vegetation index the namelist namelist.py is simple. It contains the path and the filename of the raw data set, as well as the names of the buffer. No other parameters can be set.

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing_3","title":"Data processing","text":"

The remapping to the target grid uses the first order conservative interpolation. After the remapping with CDO two additional fields are computed:

  • NDVI_MAX, the maximum NDVI value over 12 months

  • NDVI_MRAT, the monthly ratio with respect to the maximum NDVI

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_3","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_ndvi), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_NDVI

  • data input: NDVI_1998_2003.nc

  • Output: buffer file with NDVI data (input_ndvi: ndvi_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_era_to_buffer","title":"extpar_era_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_era_to_buffer","title":"Short description of the subprogram extpar_era_to_buffer","text":"

The executable extpar_era_to_buffer aggregates ERA data (T2M, SST, W_SNOW and ORO) to the target grid. It replaces the two NetCDF-Files generated by ICON-REMAP at DWD. Note that this executable is for Icon-grids only.

For the aggregation of the ERA climatologies the namelist namelist.py is simple again. It contains the type of ERA climatology (ERA5 (1) or ERA-I (2)) the path and the filenames of the raw data sets, as well as the names of the buffer. No other parameters can be set.

"},{"location":"user_manual/user_manual_04_python_modules/#data-processing_4","title":"Data processing","text":"

The remapping to the target grid uses the first order conservative interpolation. After the remapping with CDO the field W_SNOW is scaled by a factor 1000. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_4","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_era), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_ERA

  • data input: ERA5_ORO_1990.nc, ERA5_SD_1990_2019.nc, ERA5_SST_1990_2019.nc and ERA5_T2M_1990_2019.nc ERA-I_ORO_1986.nc, ERA-I_SD_1986_2015.nc, ERA-I_SST_1986_2015.nc and ERA-I_T2M_1986_2015

  • Output: buffer file with ERA data (input_era: era_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_isa_to_buffer","title":"extpar_isa_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_isa_to_buffer","title":"Short description of the subprogram extpar_isa_to_buffer","text":"

The executable extpar_isa_to_buffer allows the aggregation or interpolation of data on the fraction of impervious surface area needed by TERRA_URB to the target grid.

For the aggregation of the ISA the namelist namelist.py is simple again. It contains the type of ISA (NOAA (1) or EEA (2)) the path and the filenames of the raw data sets, as well as the names of the buffer. No other parameters can be set. Note that the underlying processing does not differ between different types of ISA

The remapping to the target grid uses the bilinear interpolation. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_5","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_isa), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_ISA

  • data input: EEA_ISA_16bit_lonlat.nc( isa_type=2), NOAA_ISA_16bit_lonlat.nc (isa_type=1)

  • Output: buffer file with ISA data (input_isa: isa_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_ahf_to_buffer","title":"extpar_ahf_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_ahf_to_buffer","title":"Short description of the subprogram extpar_ahf_to_buffer","text":"

The executable extpar_ahf_to_buffer allows the aggregation or interpolation of data on the anthropogenic heat flux needed by TERRA_URB to the target grid.

For the aggregation of the AHF the namelist namelist.py is simple again. It contains the type of AHF (2.5min (1) or 30sec (2)) the path and the filenames of the raw data sets, as well as the names of the buffer. No other parameters can be set. Note that the underlying processing does not differ between different types of AHF

The remapping to the target grid uses the bilinear interpolation. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_6","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_ahf), INPUT_grid_org, INPUT_COSMO_GRID, INPUT_ICON_GRID

  • generate namelist: INPUT_AHF

  • data input: AHF_2006_2.5min_lonlat.nc (ahf_type=1),AHF_2006_NOAA_30sec_lonlat.nc (ahf_type=2)

  • Output: buffer file with AHF data (input_ahf: ahf_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_edgar_to_buffer","title":"extpar_edgar_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_edgar_to_buffer","title":"Short description of the subprogram extpar_edgar_to_buffer","text":"

The executable extpar_edgar_to_buffer allows the interpolation of global emission data for black carbon, organic carbon and sulfur dioxide needed for the 2D-Aerosol in ICON to the target grid.

The namelist contains only the path to the raw data, the raw data file names and the name of the buffer file.

The remapping to the target grid uses the first order conservative interpolation. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_7","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_edgar), INPUT_grid_org, INPUT_ICON_GRID

  • generate namelist: INPUT_edgar

  • data input: v8.1_FT2022_AP_NH3_2022_TOTALS_flx.nc, v8.1_FT2022_AP_OC_2022_TOTALS_flx.nc, v8.1_FT2022_AP_BC_2022_TOTALS_flx.nc, v8.1_FT2022_AP_NOx_2022_TOTALS_flx.nc, v8.1_FT2022_AP_SO2_2022_TOTALS_flx.nc

  • Output: buffer file with EDGAR data (input_edgar: edgar_buffer_file)

"},{"location":"user_manual/user_manual_04_python_modules/#extpar_cdnc_to_buffer","title":"extpar_cdnc_to_buffer","text":""},{"location":"user_manual/user_manual_04_python_modules/#short-description-of-the-subprogram-extpar_cdnc_to_buffer","title":"Short description of the subprogram extpar_cdnc_to_buffer","text":"

The executable extpar_cdnc_to_buffer allows the interpolation of climatology data for cloud droplet number needed for the Cloud-Aerosol in ICON to the target grid.

The namelist contains only the path to the raw data, the raw data file names and the name of the buffer file.

The remapping to the target grid uses the first order conservative interpolation. No other processing steps take place.

"},{"location":"user_manual/user_manual_04_python_modules/#used-namelist-files-and-data-in-output_8","title":"Used namelist files and data in-/output:","text":"
  • namelists files: namelist.py (dict: input_cdnc), INPUT_grid_org, INPUT_ICON_GRID

  • generate namelist: INPUT_cdnc

  • data input: cdnc_climatology_Q06.nc

  • Output: buffer file with cloud droplet number data (input_cdnc: cdnc_buffer_file)

  1. https://svn-ccsm-inputdata.cgd.ucar.edu/trunk/inputdata/lnd/clm2/rawdata/mksrf_soilcol.081008.nc

    Lawrence, P. J. and T. N. Chase (2007). \"Representing a new MODIS consistent land surface in the Community Land Model (CLM 3.0).\" Journal of Geophysical Research-Biogeosciences 112(G1).\\ Table 3.3 in: Oleson, K.W., D.M. Lawrence, G.B. Bonan, M.G. Flanner, E. Kluzek, P.J. Lawrence, S. Levis, S.C. Swenson, P.E. Thornton, A. Dai, M. Decker, R. Dickinson, J. Feddema, C.L. Heald, F. Hoffman, J.-F. Lamarque, N. Mahowald, G.-Y. Niu, T. Qian, J. Randerson, S. Running, K. Sakaguchi, A. Slater, R. Stockli, A. Wang, Z.-L. Yang, Xi. Zeng, and Xu. Zeng, 2010: Technical Description of version 4.0 of the Community Land Model (CLM). NCAR Technical Note NCAR/TN-478+STR, National Center for Atmospheric Research, Boulder, CO, 257 pp.\u00a0\u21a9

"},{"location":"user_manual/user_manual_05_current_limitations/","title":"Current Limitations","text":"

The EXTPAR software is subject to several limitations:

  • The ASTER domain can only be used from 60\u00b0N to 60\u00b0S. Be aware that an additional border of several gridpoints is needed if the topographically corrected parameters are desired. If the ASTER domain is exceeded a warning message is printed and the program extpar_topo_to_buffer is aborted.

  • The ASTER data shows some deficits, which are listed below:

    • Beyond 60 degrees north and south, the ASTER raw data set features several areas where no value is available e.g., over Finland (private communication with HIRLAM).

    • Some bogus regions may appear in complex topography. One of these regions is located near Grindelwald in Switzerland.

    • The ASTER data are subject to artefacts of the satellite fly-over bands. Discontinuities can be spotted at the borders of such bands. In high latitudes these bands are better visible than in the low latitudes.

    • As the correction of these deficits are time consuming no effort has been expended to remove these.

    • The ASTER data might be subject to a shift of a half gridpoint (15 meters) in both directions.

  • There is no 3 km filtered ASTER or MERIT/REMA data set to derive the subgrid scale orography (SSO) parameters and the roughness length (z0) for ASTER.

  • The HWSD raw data is in a test phase. Furthermore a new version of Int2lm and TERRA is needed to make use of these data sets.

  • The subsoil can only be used if the HWSD data is used for the topsoil. If the FAO and the HWSD data are combined a warning message is printed and the ldeep_soil parameter is set to .FALSE..

  • The special points are only tested for the COSMO grid. Also it is not possible to use these corrections if the soil raw data set is HWSD.

  • Array-caching in the consistency_check is only supported for GCC compiler.

  • CAMS aersosl data iaot_type = 5 is only supported for Intel compiler.

"},{"location":"user_manual/user_manual_06_namelist_input/","title":"Namelist Input","text":"

EXTPAR uses 3 types of namelists in order to determine in which way data is processed.

  • Fortran namelists (INPUT_)
  • Python dictionaries (input_in namelist.py)
  • Fortran namelists written by Python scripts

Whereas for the Fortran namelists and the Python dictionaries the user can specify parameters and filenames, the Fortran namelists generated during runtime by the Python scripts do not allow any user interaction.

"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_namelist_files","title":"Namelist files","text":"Namelist file Purpose Made by script Used by program INPUT_grid_org define target grid type runscript extpar_consistency_check, extpar_aot_to_buffer, extpar_landuse_to_buffer, extpar_topo_to_buffer, extpar_cru_to_buffer, extpar_ndvi_to_buffer, extpar_soil_to_buffer, extpar_flake_to_buffer, extpar_isa_to_buffer, extpar_ahf_to_buffer, extpar_emiss_to_buffer, extpar_hwsdART_to_buffer INPUT_COSMO_GRID define target domain for COSMO grid runscript extpar_consistency_check, extpar_aot_to_buffer, extpar_landuse_to_buffer, extpar_topo_to_buffer, extpar_cru_to_buffer, extpar_ndvi_to_buffer, extpar_soil_to_buffer, extpar_flake_to_buffer, extpar_isa_to_buffer, extpar_ahf_to_buffer, extpar_emiss_to_buffer, extpar_hwsdART_to_buffer INPUT_ICON_GRID define target domain for ICON grid runscript extpar_consistency_check, extpar_aot_to_buffer, extpar_landuse_to_buffer, extpar_topo_to_buffer, extpar_cru_to_buffer, extpar_ndvi_to_buffer, extpar_soil_to_buffer, extpar_flake_to_buffer, extpar_isa_to_buffer, extpar_ahf_to_buffer, extpar_emiss_to_buffer INPUT_ORO settings for orography data runscript extpar_topo_to_buffer INPUT_OROSMOOTH settings for orography smoothing runscript extpar_topo_to_buffer INPUT_RADTOPO settings for generating topographical shading fields runscript extpar_topo_to_buffer INPUT_SCALE_SEP settings to control scale separation for SSO an Z0 calculation runscript extpar_topo_to_buffer INPUT_LU settings for landuse data runscript extpar_landuse_to_buffer INPUT_AOT settings for aerosol data runscript extpar_aot_to_buffer INPUT_TCLIM settings for temperature data extpar_cru_to_buffer extpar_consistency_check INPUT_NDVI settings for NDVI data extpar_ndvi_to_buffer extpar_consistency_check INPUT_SOIL settings for soil data runscript extpar_soil_to_buffer INPUT_FLAKE settings for lake data runscript extpar_flake_to_buffer INPUT_ALB settings for albedo data extpar_albedo_to_buffer extpar_consistency_check INPUT_ISA settings for fraction of impervious surface area data extpar_isa_to_buffer extpar_consistency_check INPUT_AHF settings for anthropogenic heat flux data extpar_ahf_to_buffer extpar_consistency_check INPUT_EMISS settings for emissivity data extpar_emiss_to_buffer extpar_consistency_check INPUT_hwsdART settings for HWSD USDA data extpar_hwsdART_to_buffer INPUT_edgar settings for EDGAR data extpar_edgar_to_buffer extpar_consistency_check INPUT_CDNC settings for cdnc data extpar_cdnc_to_buffer extpar_consistency_check INPUT_ERA settings for ERA data extpar_era_to_buffer extpar_consistency_check INPUT_CHECK settings for the consistency check runscript extpar_consistency_check"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_grid_def","title":"Grid Definition","text":"

The specification of the model type (COSMO or ICON) is done in the namelist file INPUT_grid_org, the detailed target grid description for the model domain has to be provided in the namelists files INPUT_COSMO_GRID or INPUT_ICON_GRID.

"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_grid_def_general","title":"General","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-grid_def-input_grid_org","title":"NAMELIST /grid_def/ (INPUT_grid_org)","text":"

The namelist /grid_def/ defines the target grid type and the filenames with the namelists of the detailed target grid definition.

Parameter Type Default Unit Description igrid_type integer target grid type, 1 for ICON, 2 for COSMO domain_def_namelist character namelist file with domain definition domain_refinement character namelist file with domain refinement definition (e.g. for the ICON grid)"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_grid_def_icon","title":"ICON","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-icon_grid_info-input_icon_grid","title":"NAMELIST /icon_grid_info/ (INPUT_ICON_GRID)","text":"

The namelist /icon_grid_info/ specifies the filenames and the directory of the Icon grid files with the coordinates of the Icon grid.

Parameter Type Default Unit Description icon_grid_dir character path to directory which contains the ICON grid file with the coordinates icon_grid_nc_file character (max_dom) filename of the ICON grid file with the coordinates"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_grid_def_cosmo","title":"COSMO","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-lmgrid-input_cosmo_grid","title":"NAMELIST /lmgrid/ (INPUT_COSMO_GRID)","text":"

The COSMO grid is defined by a rotated latlon-grid.

Parameter Type Default Unit Description pollon real -170. deg longitude of the rotated north pole (in degrees, \\(E>0\\)) pollat real 32.5 deg latitude of the rotated north pole (in degrees, \\(N>0\\)) polgam real 0. deg longitude (in the rotated system) of the geographical north pole dlon real 0.08 deg grid point distance in zonal direction (in degrees) dlat real 0.08 deg grid point distance in meridional direction (in degrees) startlon_tot real -1.252 deg transformed longitude of the lower left grid point of the total domain (in degrees, \\(E>0\\)) startlat_tot real -7.972 deg transformed latitude of the lower left grid point of the total domain (in degrees, \\(N>0\\)) ie_tot integer 51 number of grid points in zonal direction je_tot integer 51 number of grid points in meridional direction ke_tot integer 0 number of grid points in vertical direction"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_orography","title":"Orography","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-oro_runcontrol-input_oro","title":"NAMELIST /oro_runcontrol/ (INPUT_ORO)","text":"Parameter Type Default Unit Description lcompute_sgsl logical .false. switch to activate subgrid-slope calculation"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-orography_raw_data-input_oro","title":"NAMELIST /orography_raw_data/ (INPUT_ORO)","text":"Parameter Type Default Unit Description itopo_type integer switch to choose an orography raw data set; 1 GLOBE, 2 ASTER, 3 MERIT/REMA lsso_param logical switch to choose if SSO parameters should be generated or not raw_data_orography_path character path to orography raw data ntiles_column integer GLOBE: 4 ASTER, MERIT/REMA: x number of tile columns of desired region ntiles_row integer GLOBE: 4 ASTER, MERIT/REMA: x number of tile rows of desired region topo_files character filenames of GLOBE (16 tiles) / ASTER (240 tiles)/ MERIT/REMA (72 tiles) raw data sets lsubtract_mean_slope logical .FALSE. for operational NWP-ICON treatment of mean slope in computation of SSO parameters for ICON"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-orography_io_extpar-input_oro","title":"NAMELIST /orography_io_extpar/ (INPUT_ORO)","text":"Parameter Type Default Unit Description orography_buffer_file character name for orography buffer file orography_output_file character name for orography output file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-sgsl_io_extpar-input_oro","title":"NAMELIST /sgsl_io_extpar/ (INPUT_ORO)","text":"Parameter Type Default Unit Description lpreproc_oro logical .false. read S_ORO from existing NetCDF (.false.) or preprocess from raw topography datasets (.true.) sgsl_files character filenames of raw data tiles to be used S_ORO_A10 to S_ORO_P10 (GLOBE) or S_ORO_T001 to S_ORO_T240"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-orography_smoothing-input_orosmooth","title":"NAMELIST /orography_smoothing/ (INPUT_OROSMOOTH)","text":"Parameter Type Default Unit Description lfilter_oro logical FALSE Cosmo-only: switch for orogaphy smoothing ilow_pass_oro integer 0 type of orogaphy smoothing and stencil width numfilt_oro integer 1 number of filter applications eps_filter real 10 smoothing parameter (\"strength\" of the filtering) ifill_valley integer 1 fill valleys before or after oro smoothing (1: before, 2: after) rfill_valley real 0 m mask for valley filling (threshold value) ilow_pass_xso integer 1 type of orogaphy eXtra SmOothing and stencil width (for steep orography) numfilt_xso integer 1 number of applications of the eXtra filter lxso_first logical FALSE eXtra SmOothing before or after orography smoothing (TRUE/FALSE) rxso_mask real 0 m mask for eXtra SmOothing (threshold value)"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-radtopo-input_radtopo","title":"NAMELIST /radtopo/ (INPUT_RADTOPO)","text":"Parameter Type Default Unit Description lradtopo logical Switch for radiation corrected topography parameters. Not recommended to use if orographical smoothing is false and smoothing is performed in Int2lm later, because of resulting inconsistencies. nhori integer 24 Number of horizon angles radius integer 40000 m Icon-only: Radial distance considered for computation of horizon min_circ_cov integer 1 - Icon-only: Number of gridcells to be skipped at circumference of circle. A value of 1 considers all points, whereas a value of 5 only consider every fifth point at the circumference. Note that the effect of this switch is dependent on the resolution of the grid as well on the radius choosen. max_missing real 0.9 - Icon-only: Upper limit for fraction of missingness for the horizon parameter. Grid-cells with values above will be set to 0. itype_scaling integer 2 - Icon-only: Power of the caling factor SIN(horizon-angle) applied to the geometric skyview factor to account for the anisotropic nature of longwave radiation."},{"location":"user_manual/user_manual_06_namelist_input/#namelist-scale_separated_raw_data-input_scale_sep","title":"NAMELIST /scale_separated_raw_data/ (INPUT_SCALE_SEP)","text":"Parameter Type Default Unit Description lscale_separation logical Switch for scale separation. It can only be used in combination with GLOBE as raw data set. raw_data_scale_sep_path character path to 3 km filtered topography scale_sep_files character filename of 3 km filtered topography"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_lu","title":"Land Use Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-lu_raw_data-input_lu","title":"NAMELIST /lu_raw_data/ (INPUT_LU)","text":"Parameter Type Default Unit Description raw_data_lu_path character path to land use data raw_data_lu_filename character filename of land use raw data i_landuse_data integer switch to choose a land use raw data set: 1 Globcover2009, 2 GLC2000, 3 GLCC, 5 ESA CCI-LC, 6 Ecoclimap-SG l_use_corine logical .false. switch to use Corine land use dataset; only possible if i_landuse_data = 1 ilookup_table_lu integer switch to choose a lookup table: - GLC2000 and GLCC: 1: operational settings of GME (Ritter, 2007) 2: operational settings of COSMO (Heise, 2005) 3: experimental setting, analogous to lookup tables of ECOCLIMAP (Asensio 2010) - GLOBCOVER 2009: 1: operational settings (Asensio, 2011) 2: experimental settings, analogous to lookup tables of ECOCLIMAP (Asensio 2010) - ESA CCI-LC: 1: experimental settings (Helmert, 2019) - Ecoclimap-SG: 1: Globcover analogue with added LCZs from Oke ntiles_globcover integer 6 number of tiles for GLOBCOVER data ncolumn_tiles integer number of columns in tile matrix l_terra_urb logical .false. switch to use TERRA-URB (see TERRA-URB); only possible if i_landuse_data = 6"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-glcc_raw_data-input_lu","title":"NAMELIST /glcc_raw_data/ (INPUT_LU)","text":"Parameter Type Default Unit Description raw_data_glcc_path character path to GLCC data raw_data_glcc_filename character filename of GLCC raw data ilookup_table_glcc integer switch to choose a lookup table: 1: operational settings of GME (Ritter, 2007) 2: operational settings of COSMO (Heise, 2005) 3: experimental setting, analogous to lookup tables of ECOCLIMAP (Asensio 2010)"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-glcc_io_extpar-input_lu","title":"NAMELIST /glcc_io_extpar/ (INPUT_LU)","text":"Parameter Type Default Unit Description glcc_buffer_file character name for GLCC buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_aot","title":"Aerosol Optical Depth","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-aerosol_raw_data-input_aot","title":"NAMELIST /aerosol_raw_data/ (INPUT_AOT)","text":"Parameter Type Default Unit Description raw_data_aot_path character path to aerosol raw data raw_data_aot_filename character filename of aerosol raw data iaot_type integer 1 index to specify AOD raw data set: 1:Tegen, 2:AeroCom, 3:MACC-II, 4:MACv2, 5:CAMS"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-aerosol_io_extpar-input_aot","title":"NAMELIST /aerosol_io_extpar/ (INPUT_AOT)","text":"Parameter Type Default Unit Description aot_buffer_file character name for aerosol buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_cru","title":"Climatological 2m Temperature","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_tclim-namelistpy","title":"DICT input_tclim (namelist.py)","text":"Parameter Type Default Unit Description raw_data_t_clim_path character path to T2m climatology data raw_data_t_clim_coarse character filename of coarse T2m climatology data raw_data_t_clim_fine character filename of fine T2m climatology data it_cl_type integer switch to choose between the new and fine (1) and the old and coarse over sea and the fine over land (2) raw data set. Note that the fine data set (1) is topographically corrected. t_clim_buffer_file character name for T_clim buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#ndvi-data","title":"NDVI Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_ndvi-namelistpy","title":"DICT input_ndvi (namelist.py)","text":"Parameter Type Default Unit Description raw_data_ndvi_path character Path to NDVI raw data raw_data_ndvi_filename character Filename of NDVI raw data ndvi_buffer_file character Name for NDVI buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#edgar-data","title":"EDGAR Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_edgar-namelistpy","title":"DICT input_edgar (namelist.py)","text":"Parameter Type Default Unit Description raw_data_edgar_path character Path to EDGAR raw data raw_data_edgar_filename_bc character Filename of EDGAR black carbon raw data raw_data_edgar_filename_oc character Filename of EDGAR organic carbon raw data raw_data_edgar_filename_so2 character Filename of EDGAR sulfur dioxide raw data raw_data_edgar_filename_nh3 character Filename of EDGAR ammonia raw data raw_data_edgar_filename_nox character Filename of EDGAR nitrogen oxides raw data"},{"location":"user_manual/user_manual_06_namelist_input/#cdnc-data","title":"CDNC Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_cdnc-namelistpy","title":"DICT input_cdnc (namelist.py)","text":"Parameter Type Default Unit Description raw_data_cdnc_path character Path to CDNC raw data raw_data_cdnc_filename character Filename of CDNC raw data"},{"location":"user_manual/user_manual_06_namelist_input/#hwsdart-data","title":"hwsdART Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-hwsdart_nml-input_hwsdart","title":"NAMELIST /hwsdART_nml/ (INPUT_hwsdART)","text":"Parameter Type Default Unit Description raw_data_hwsdART_path character Path to hwsdART raw data raw_data_hwsdART_filename character Filename of hwsdART raw data hwsdART_output_file character Name for hwsdART output file"},{"location":"user_manual/user_manual_06_namelist_input/#soil-data","title":"Soil Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-soil_raw_data-input_soil","title":"NAMELIST /soil_raw_data/ (INPUT_SOIL)","text":"Parameter Type Default Unit Description isoil_data integer Switch to choose between raw soil data, 1: FAO, 2: HWSD, 3: HWSD with terra mapping ldeep_soil logical Switch for deep soil, set to .TRUE. if using HWSD data raw_data_soil_path character Path to soil raw data raw_data_soil_filename character Filename of soil raw data raw_data_deep_soil_filename character Filename of deep soil raw data"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-soil_io_extpar-input_soil","title":"NAMELIST /soil_io_extpar/ (INPUT_SOIL)","text":"Parameter Type Default Unit Description soil_buffer_file character Name for soil buffer file soil_buffer_file_consistent character Name for soil buffer file after consistency check soil_output_file_consistent character Name for soil output file after consistency check"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-hwsd_index_files-input_soil","title":"NAMELIST /HWSD_index_files/ (INPUT_SOIL)","text":"Parameter Type Default Unit Description path_HWSD_index_files character Path to HWSD lookup tables lookup_table_HWSD character Lookup table to convert soil type index from global to TERRA soil type HWSD_data character Lookup table for sand, silt, clay, organic carbon, and bulk density (topsoil) HWSD_data_deep character Lookup table for sand, silt, clay, organic carbon, and bulk density (subsoil) HWSD_data_extpar character Parameter for development purposes"},{"location":"user_manual/user_manual_06_namelist_input/#freshwater-lake-data","title":"Freshwater Lake Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-flake_raw_data-input_flake","title":"NAMELIST /flake_raw_data/ (INPUT_FLAKE)","text":"Parameter Type Default Unit Description raw_data_flake_path character Path to flake raw data raw_data_flake_filename character Filename of flake raw data"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-flake_io_extpar-input_flake","title":"NAMELIST /flake_io_extpar/ (INPUT_FLAKE)","text":"Parameter Type Default Unit Description flake_buffer_file character Name for flake buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#albedo-data","title":"Albedo Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_alb-namelistpy","title":"DICT input_alb (namelist.py)","text":"Parameter Type Default Unit Description raw_data_alb_path character Path to raw albedo data raw_data_alb_filename character Filename of raw albedo data raw_data_alnid_filename character Filename of raw NIR-albedo data raw_data_aluvd_filename character Filename of raw UV-albedo data ialb_type integer Switch to indicate albedo type: 1: total albedo, 2: soil albedo, 3: as 1 without NI and UV fields alb_buffer_file character Name for albedo buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_isa","title":"ISA Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_isa-namelistpy","title":"DICT input_isa (namelist.py)","text":"Parameter Type Default Unit Description raw_data_isa_path character path to ISA raw data raw_data_isa_filename character filename of ISA raw data isa_type integer type of used ISA data source isa_buffer_file character name for ISA buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_ahf","title":"AHF Data","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_ahf-namelistpy","title":"DICT input_ahf (namelist.py)","text":"Parameter Type Default Unit Description raw_data_ahf_path character path to AHF raw data raw_data_ahf_filename character filename of AHF raw data iahf_type integer type of used AHF data source ahf_buffer_file character name for AHF buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_emissivity","title":"Emissivity Parameter","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_emiss-namelistpy","title":"DICT input_emiss (namelist.py)","text":"Parameter Type Default Unit Description iemiss_type integer switch to choose between full-range (1) and long-wave (2) emissivity data raw_data_emiss_path character path to emissivity parameter raw data raw_data_emiss_filename character filenames of emissivity raw data emiss_buffer_file character name for emissivity parameter buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_era","title":"ERA Parameter","text":""},{"location":"user_manual/user_manual_06_namelist_input/#dict-input_era-namelistpy","title":"DICT input_era (namelist.py)","text":"Parameter Type Default Unit Description iera_type integer type of ERA climatology: ERA5 (1) and ERA-I (2) raw_data_era_path character path to ERA raw data raw_data_era_ORO character filenames of ERA ORO raw data raw_data_era_SD character filenames of ERA SD raw data raw_data_era_T2M character filenames of ERA T2M raw data raw_data_era_SST character filenames of ERA SST raw data era_buffer_file character name for ERA parameter buffer file"},{"location":"user_manual/user_manual_06_namelist_input/#namelist_input_for_extpar_consistency_check","title":"Consistency Check","text":""},{"location":"user_manual/user_manual_06_namelist_input/#namelist-extpar_consistency_check_io-input_check","title":"NAMELIST /extpar_consistency_check_io/ (INPUT_CHECK)","text":"Parameter Type Default Unit Description l_use_array_cache flag F flag indicating whether mmap-caching is used (reduces memory consumption but increases runtime) netcdf_output_filename character filename for NetCDF output i_lsm_data integer integer switch to choose if an external land-sea mask is desired (0: no, 1: use external land-sea mask) land_sea_mask_file character name of the file used as the external land-sea mask number_special_points integer number of points that should be treated specially (max value: 3, choose 0 if not needed) lwrite_netcdf logical T flag indicating whether NetCDF output for COSMO grid is desired tile_mode integer 0 if activated (tile_mode=1), process output for ICON tile structure lflake_correction logical T if activated, fr_lake values of grid points next to the ocean are set to ocean values, and the lake depth value is set to undefined (default in EXTPAR version 4.0, but not in DWD EXTPAR version 2.10)"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-special_points-input_sp_1","title":"NAMELIST /special_points/ (INPUT_SP_1)","text":"

Modifications for Falkenberg.

Parameter Type Default Unit Description lon_geo_sp real 14.115 deg east longitude coordinate of the special point lat_geo_sp real 52.156 deg north latitude coordinate of the special point soiltype_sp real 3.0 - soil type of the special point z0_sp real 0.03 m roughness length of the special point rootdp_sp real 0.6 m rooting depth of the special point plcovmn_sp real 0.55 1 plant cover minimum of the special point plcovmx_sp real 0.8 1 plant cover maximum of the special point laimn_sp real 0.5 1 leaf area index minimum of the special point laimx_sp real 2.5 1 leaf area index maximum of the special point for_d_sp real 1 ground fraction covered by deciduous forest at the special point for_e_sp real 1 ground fraction covered by evergreen forest at the special point fr_land_sp real 1 fraction land cover of the special point"},{"location":"user_manual/user_manual_06_namelist_input/#namelist-special_points-input_sp_2","title":"NAMELIST /special_points/ (INPUT_SP_2)","text":"

Modifications for Waldstation.

Parameter Type Default Unit Description lon_geo_sp real 13.954 deg east longitude coordinate of the special point lat_geo_sp real 52.186 deg north latitude coordinate of the special point soiltype_sp real 3.0 - soil type of the special point z0_sp real 0.78 m roughness length of the special point rootdp_sp real 0.6 m rooting depth of the special point plcovmn_sp real 0.79 1 plant cover minimum of the special point plcovmx_sp real 0.81 1 plant cover maximum of the special point laimn_sp real 3.0 1 leaf area index minimum of the special point laimx_sp real 4.0 1 leaf area index maximum of the special point for_d_sp real 1 ground fraction covered by deciduous forest at the special point for_e_sp real 1 ground fraction covered by evergreen forest at the special point fr_land_sp real 1 fraction land cover of the special point"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 4e5e6e4c..a70521f8 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,62 +2,62 @@ http://c2sm.github.io/extpar/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/SUMMARY/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/compile_run/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/dependencies/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/development/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/release_notes/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/testing/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/user_manual/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/user_manual/SUMMARY/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/user_manual/user_manual_01_overall_description/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/user_manual/user_manual_02_software_modules/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/user_manual/user_manual_03_fortran_modules/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/user_manual/user_manual_04_python_modules/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/user_manual/user_manual_05_current_limitations/ - 2025-02-11 + 2025-02-12 http://c2sm.github.io/extpar/user_manual/user_manual_06_namelist_input/ - 2025-02-11 + 2025-02-12 \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index aaa187f236b94bcc87abb89eed82aafccfa8a163..193b5e85157b0845cc0dca77510ff45997516093 100644 GIT binary patch literal 353 zcmV-n0iOOJiwFpS%O9%h}UU;Zd literal 353 zcmV-n0iOOJiwFn+ld5L||8r?{Wo=<_E_iKh0L_*?Ps1<}hIf8Nl)Z5hC<2tGVqxn7 zbYQZKb8Rg7OTKec{ypx8P!|S-l*WrcbiU`ce17F-xi>o7K|tl~BCm=v&%jF8DZ5?d z>-U%0L%wWpniw_xkDfs*R^$7&u3*ltEv=oUOOS!5980YxAkiE z{Q5C6RXXF91|FgvncRT~+og+EfTN>#pq)2hX=HK$4FZ8%N28xQ5h*>Xk*N_Oa3gFK z`ikW1Jg!Rx7h_&l+$FygTJsK22IVPP-&Dla9NmTn5r8L9)T0;bugY%u#svz(PEFVy z_g~bz$?2MN8AC`m$F(ww#G%Y4BkrDCVL&S+uB?y$u;OEv{s!$g8Re3HO9%h}_4lV1 diff --git a/testing/index.html b/testing/index.html index 86793f71..c05ac092 100644 --- a/testing/index.html +++ b/testing/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -951,7 +951,7 @@

Add a New Test - February 11, 2025 + February 12, 2025 @@ -961,7 +961,7 @@

Add a New Test - February 11, 2025 + February 12, 2025 diff --git a/user_manual/SUMMARY/index.html b/user_manual/SUMMARY/index.html index e0d84093..18b8a7c2 100644 --- a/user_manual/SUMMARY/index.html +++ b/user_manual/SUMMARY/index.html @@ -14,7 +14,7 @@ - + @@ -22,7 +22,7 @@ - + @@ -782,7 +782,7 @@

SUMMARY

- February 11, 2025 + February 12, 2025 @@ -792,7 +792,7 @@

SUMMARY

- February 11, 2025 + February 12, 2025 diff --git a/user_manual/index.html b/user_manual/index.html index 9919ffe9..848c5095 100644 --- a/user_manual/index.html +++ b/user_manual/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -797,7 +797,7 @@

User and Implementation Guide - February 11, 2025 + February 12, 2025 @@ -807,7 +807,7 @@

User and Implementation Guide - February 11, 2025 + February 12, 2025 diff --git a/user_manual/user_manual_01_overall_description/index.html b/user_manual/user_manual_01_overall_description/index.html index 343ebebf..76d38b36 100644 --- a/user_manual/user_manual_01_overall_description/index.html +++ b/user_manual/user_manual_01_overall_description/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -1752,7 +1752,7 @@

Output External Parameters - February 11, 2025 + February 12, 2025 @@ -1762,7 +1762,7 @@

Output External Parameters - February 11, 2025 + February 12, 2025 diff --git a/user_manual/user_manual_02_software_modules/index.html b/user_manual/user_manual_02_software_modules/index.html index cfb2e128..6cebe747 100644 --- a/user_manual/user_manual_02_software_modules/index.html +++ b/user_manual/user_manual_02_software_modules/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -1016,7 +1016,7 @@

Summary - February 11, 2025 + February 12, 2025 @@ -1026,7 +1026,7 @@

Summary - February 11, 2025 + February 12, 2025 diff --git a/user_manual/user_manual_03_fortran_modules/index.html b/user_manual/user_manual_03_fortran_modules/index.html index d4670fd0..df5ff55a 100644 --- a/user_manual/user_manual_03_fortran_modules/index.html +++ b/user_manual/user_manual_03_fortran_modules/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -3075,7 +3075,7 @@

Used namelist files and data i - February 11, 2025 + February 12, 2025 @@ -3085,7 +3085,7 @@

Used namelist files and data i - February 11, 2025 + February 12, 2025 diff --git a/user_manual/user_manual_04_python_modules/index.html b/user_manual/user_manual_04_python_modules/index.html index 6eab9648..b85a188e 100644 --- a/user_manual/user_manual_04_python_modules/index.html +++ b/user_manual/user_manual_04_python_modules/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -1433,7 +1433,7 @@

Used namelist files and data i - February 11, 2025 + February 12, 2025 @@ -1443,7 +1443,7 @@

Used namelist files and data i - February 11, 2025 + February 12, 2025 diff --git a/user_manual/user_manual_05_current_limitations/index.html b/user_manual/user_manual_05_current_limitations/index.html index 06f2a396..968d7c0c 100644 --- a/user_manual/user_manual_05_current_limitations/index.html +++ b/user_manual/user_manual_05_current_limitations/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -864,7 +864,7 @@

Current Limitations - February 11, 2025 + February 12, 2025 @@ -874,7 +874,7 @@

Current Limitations - February 11, 2025 + February 12, 2025 diff --git a/user_manual/user_manual_06_namelist_input/index.html b/user_manual/user_manual_06_namelist_input/index.html index 11f3fcf3..5bf5777a 100644 --- a/user_manual/user_manual_06_namelist_input/index.html +++ b/user_manual/user_manual_06_namelist_input/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -2977,7 +2977,7 @@

NAMELIST /special_points/ - February 11, 2025 + February 12, 2025 @@ -2987,7 +2987,7 @@

NAMELIST /special_points/ - February 11, 2025 + February 12, 2025