diff --git a/previews/PR490/assets/documenter.js b/previews/PR490/assets/documenter.js new file mode 100644 index 000000000..6f45343f0 --- /dev/null +++ b/previews/PR490/assets/documenter.js @@ -0,0 +1,336 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ], + "macros": { + "\\SI": "{#1\\;\\mathrm{#2}}", + "\\SIb": "{#1\\;[\\mathrm{#2}}]", + "\\subtext": "#1_\\text{#2}" + } +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function() { + var settings = $('#documenter-settings'); + $('#documenter-settings-button').click(function(){ + settings.toggleClass('is-active'); + }); + // Close the dialog if X is clicked + $('#documenter-settings button.delete').click(function(){ + settings.removeClass('is-active'); + }); + // Close dialog if ESC is pressed + $(document).keyup(function(e) { + if (e.keyCode == 27) settings.removeClass('is-active'); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function() { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button") + sidebar_button.click(function(ev) { + ev.preventDefault(); + sidebar.toggleClass('visible'); + if (sidebar.hasClass('visible')) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind('click', function(ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + }); +}) + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function() { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css('max-width'), 10); + var L0 = e.width(); + if(L0 > L) { + var h0 = parseInt(e.css('font-size'), 10); + e.css('font-size', L * h0 / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on('orientationchange', resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function() { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if(typeof active !== 'undefined') { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +function set_theme(theme) { + var active = null; + var disabled = []; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + var themename = ss.ownerNode.getAttribute("data-theme-name"); + if(themename === null) continue; // ignore non-theme stylesheets + // Find the active theme + if(themename === theme) active = ss; + else disabled.push(ss); + } + if(active !== null) { + active.disabled = false; + if(active.ownerNode.getAttribute("data-theme-primary") === null) { + document.getElementsByTagName('html')[0].className = "theme--" + theme; + } else { + document.getElementsByTagName('html')[0].className = ""; + } + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + + // Store the theme in localStorage + if(typeof(window.localStorage) !== "undefined") { + window.localStorage.setItem("documenter-theme", theme); + } else { + console.error("Browser does not support window.localStorage"); + } +} + +// Theme picker setup +$(document).ready(function() { + // onchange callback + $('#documenter-themepicker').change(function themepick_callback(ev){ + var themename = $('#documenter-themepicker option:selected').attr('value'); + set_theme(themename); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if(typeof(window.localStorage) !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if(theme !== null) { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = (e.value === theme); + }) + } else { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = $("html").hasClass(`theme--${e.value}`); + }) + } + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/previews/PR490/assets/logo.png b/previews/PR490/assets/logo.png new file mode 100644 index 000000000..da48ec68f Binary files /dev/null and b/previews/PR490/assets/logo.png differ diff --git a/previews/PR490/assets/search.js b/previews/PR490/assets/search.js new file mode 100644 index 000000000..c133f7410 --- /dev/null +++ b/previews/PR490/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + } +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'lunr', 'lodash'], function($, lunr, _) { + +$(document).ready(function() { + // parseUri 1.2.2 + // (c) Steven Levithan + // MIT License + function parseUri (str) { + var o = parseUri.options, + m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), + uri = {}, + i = 14; + + while (i--) uri[o.key[i]] = m[i] || ""; + + uri[o.q.name] = {}; + uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { + if ($1) uri[o.q.name][$1] = $2; + }); + + return uri; + }; + parseUri.options = { + strictMode: false, + key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], + q: { + name: "queryKey", + parser: /(?:^|&)([^&=]*)=?([^&]*)/g + }, + parser: { + strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, + loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ + } + }; + + $("#search-form").submit(function(e) { + e.preventDefault() + }) + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'does', + 'either', + 'ever', + 'every', + 'from', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'into', + 'it', + 'its', + 'just', + 'least', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'who', + 'whom', + 'why', + 'will', + 'would', + 'yet', + 'you', + 'your' + ]) + + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!" + // would not find anything if searching for "add!", only for the entire qualification + lunr.tokenizer.separator = /[\s\-\.]+/ + + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '') + }) + } + + lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter') + lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer') + + var index = lunr(function () { + this.ref('location') + this.field('title',{boost: 100}) + this.field('text') + documenterSearchIndex['docs'].forEach(function(e) { + this.add(e) + }, this) + }) + var store = {} + + documenterSearchIndex['docs'].forEach(function(e) { + store[e.location] = {title: e.title, category: e.category, page: e.page} + }) + + $(function(){ + searchresults = $('#documenter-search-results'); + searchinfo = $('#documenter-search-info'); + searchbox = $('#documenter-search-query'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + function update_search(querystring) { + tokens = lunr.tokenizer(querystring) + results = index.query(function (q) { + tokens.forEach(function (t) { + q.term(t.toString(), { + fields: ["title"], + boost: 100, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["title"], + boost: 10, + usePipeline: true, + editDistance: 2, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["text"], + boost: 1, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + }) + }) + searchinfo.text("Number of results: " + results.length) + searchresults.empty() + results.forEach(function(result) { + data = store[result.ref] + link = $(''+data.title+'') + link.attr('href', documenterBaseURL+'/'+result.ref) + if (data.category != "page"){ + cat = $('('+data.category+', '+data.page+')') + } else { + cat = $('('+data.category+')') + } + li = $('
  • ').append(link).append(" ").append(cat) + searchresults.append(li) + }) + } + + function update_search_box() { + querystring = searchbox.val() + update_search(querystring) + } + + searchbox.keyup(_.debounce(update_search_box, 250)) + searchbox.change(update_search_box) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/previews/PR490/assets/themes/documenter-dark.css b/previews/PR490/assets/themes/documenter-dark.css new file mode 100644 index 000000000..c94a294dc --- /dev/null +++ b/previews/PR490/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable,html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .list:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .highlight:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:15px;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:15px !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.85em !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:15px !important}.is-size-7-mobile{font-size:.85em !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:15px !important}.is-size-7-tablet{font-size:.85em !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:15px !important}.is-size-7-touch{font-size:.85em !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:15px !important}.is-size-7-desktop{font-size:.85em !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:15px !important}.is-size-7-widescreen{font-size:.85em !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:15px !important}.is-size-7-fullhd{font-size:.85em !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:left}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:#1d2122}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:#282f2f;border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#dde4e6}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#ecf0f1;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:3px;font-size:.85em}html.theme--documenter-dark .button.is-normal{font-size:15px}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#dbdee0;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:3px;font-size:.85em}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}html.theme--documenter-dark .container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container{max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container{max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:left}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.85em}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{position:absolute;right:0.5rem;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:15px;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#5e6d6f}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#5e6d6f;background-image:linear-gradient(to right, #fff 30%, #5e6d6f 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.85em}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:15px}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.85em;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.85em}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:15px}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:290486px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title+.highlight{margin-top:-0.75rem}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:15px}html.theme--documenter-dark .title.is-7{font-size:.85em}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:15px}html.theme--documenter-dark .subtitle.is-7{font-size:.85em}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}html.theme--documenter-dark .highlight pre{overflow:auto;max-width:100%}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.85em}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:600px;min-height:120px}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:0.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.25em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.85em}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.85em}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:#282f2f}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:#282f2f}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:#282f2f}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:#282f2f}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#ecf0f1}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.85em}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#e5eaec;color:#282f2f}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#ecf0f1;color:#343c3d}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#282f2f;display:block;font-size:15px;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.85em}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.85em;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.85em;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:0.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:15px;position:relative;text-align:left}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#5e6d6f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.85em}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#dbdee0;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.25em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.25em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.85em}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:15px;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:0.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:0.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.85em}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:.75rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #5e6d6f;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #5e6d6f}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#5e6d6f;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .list{background-color:#fff;border-radius:.4em;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}html.theme--documenter-dark .list-item{display:block;padding:0.5em 1em}html.theme--documenter-dark .list-item:not(a){color:#fff}html.theme--documenter-dark .list-item:first-child{border-top-left-radius:.4em;border-top-right-radius:.4em}html.theme--documenter-dark .list-item:last-child{border-bottom-left-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .list-item:not(:last-child){border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .list-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark a.list-item{background-color:#282f2f;cursor:pointer}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:left}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:0.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:0.5rem}html.theme--documenter-dark .media .media .media{padding-top:0.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:0.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:15px}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.85em}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:15px}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.85em}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff;color:#4d4d4d}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a;color:#090909}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1;color:#505050}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f;color:#212526}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f8fafc}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#2b4159}html.theme--documenter-dark .message.is-link{background-color:#f6fefc}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#0b2f28}html.theme--documenter-dark .message.is-info{background-color:#f5fbff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#033659}html.theme--documenter-dark .message.is-success{background-color:#f5fff9}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#023518}html.theme--documenter-dark .message.is-warning{background-color:#fffcf5}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#3d2e03}html.theme--documenter-dark .message.is-danger{background-color:#fef6f6}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#7a170c}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:0.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:#282f2f}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:#282f2f}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#ecf0f1}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#ecf0f1}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{display:block;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item{display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:15px;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.85em}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.25em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled]{background-color:#dbdee0;border-color:#dbdee0;box-shadow:none;color:#5e6d6f;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{font-size:15px}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs,html.theme--documenter-dark .panel-block{border-bottom:1px solid #5e6d6f;border-left:1px solid #5e6d6f;border-right:1px solid #5e6d6f}html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child,html.theme--documenter-dark .panel-block:first-child{border-top:1px solid #5e6d6f}html.theme--documenter-dark .panel-heading{background-color:#282f2f;border-radius:.4em .4em 0 0;color:#f2f2f2;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:0.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:0.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:15px;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:0.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:0.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-radius:.4em 0 0 .4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-radius:0 .4em .4em 0}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.85em}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.3333333333%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.6666666667%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.3333333333%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.6666666667%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.3333333333%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.6666666667%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.3333333333%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.6666666667%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:#282f2f}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(40,47,47,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:#282f2f}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(40,47,47,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .hero.is-light .tabs a{color:#282f2f;opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:#282f2f}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#282f2f;border-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#ecf0f1}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(236,240,241,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#ecf0f1}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(236,240,241,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#ecf0f1}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#ecf0f1;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#ecf0f1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section.is-medium{padding:9rem 1.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 1.5rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:#282f2f;text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#ecf0f1;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:15px}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.85em}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:15px;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:14.25px;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:11.25px;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:12.75px;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark #documenter .docs-main #documenter-search-info{margin-bottom:1rem}html.theme--documenter-dark #documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}html.theme--documenter-dark #documenter .docs-main #documenter-search-results li{margin-left:2rem}html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2} diff --git a/previews/PR490/assets/themes/documenter-light.css b/previews/PR490/assets/themes/documenter-light.css new file mode 100644 index 000000000..9b9a14b04 --- /dev/null +++ b/previews/PR490/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable,.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.message:not(:last-child),.list:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.highlight:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#222}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}.box{background-color:#fff;border-radius:6px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}.button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:#363636}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:#363636}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:#363636}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:#292929}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:#363636;color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#f5f5f5}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#f5f5f5}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#f5f5f5}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#f5f5f5}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#f5f5f5;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#e8e8e8}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#f5f5f5;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#f5f5f5}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#f5f5f5;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{border-radius:2px;font-size:.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){.container{max-width:992px}.container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){.container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){.container{max-width:1152px}}@media screen and (min-width: 1408px){.container{max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{position:absolute;right:0.5rem;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#f5f5f5}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-danger{background-color:#da0b00;color:#fff}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#dbdbdb}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #dbdbdb 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #dbdbdb 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #dbdbdb 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #dbdbdb 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #dbdbdb 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #dbdbdb 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #dbdbdb 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#dbdbdb;background-image:linear-gradient(to right, #222 30%, #dbdbdb 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#f5f5f5}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:#363636}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#f5f5f5}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:290486px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-0.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(54,54,54,0.3)}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(54,54,54,0.3)}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}.textarea:not([rows]){max-height:600px;min-height:120px}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#363636}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:0.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.25em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:#363636}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:#363636}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:#363636}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#f5f5f5}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#f5f5f5}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#f5f5f5}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#f5f5f5}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:0.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#6b6b6b}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.25em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.25em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:0.5em}.breadcrumb .icon:last-child{margin-left:0.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#222;max-width:100%;position:relative}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}.card-image{display:block;position:relative}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #dbdbdb;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #dbdbdb}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#dbdbdb;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.list{background-color:#fff;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}.list-item{display:block;padding:0.5em 1em}.list-item:not(a){color:#222}.list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.list-item:not(:last-child){border-bottom:1px solid #dbdbdb}.list-item.is-active{background-color:#2e63b8;color:#fff}a.list-item{background-color:#f5f5f5;cursor:pointer}.media{align-items:flex-start;display:flex;text-align:left}.media .content:not(:last-child){margin-bottom:0.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:0.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:0.5rem}.media .media .media{padding-top:0.5rem}.media .media .media+.media{margin-top:0.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:#363636}.message.is-light .message-body{border-color:#f5f5f5;color:#505050}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#f5f5f5}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636;color:#2a2a2a}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#f6fbfd}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1f556a}.message.is-link{background-color:#f7f9fd}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#264981}.message.is-info{background-color:#f6fbfe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#12537d}.message.is-success{background-color:#f6fdf9}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#0f361d}.message.is-warning{background-color:#fffdf5}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#3c3108}.message.is-danger{background-color:#fff5f5}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#9b0c04}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:0.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:#363636}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:#363636}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-burger{color:#363636}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:#363636}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#f5f5f5}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#f5f5f5}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#f5f5f5}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#f5f5f5}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#f5f5f5}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{display:block;flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#363636;min-width:2.25em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel-heading,.panel-tabs,.panel-block{border-bottom:1px solid #dbdbdb;border-left:1px solid #dbdbdb;border-right:1px solid #dbdbdb}.panel-heading:first-child,.panel-tabs:first-child,.panel-block:first-child{border-top:1px solid #dbdbdb}.panel-heading{background-color:#f5f5f5;border-radius:4px 4px 0 0;color:#222;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:0.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:0.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:0.5em}.tabs .icon:last-child{margin-left:0.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-radius:4px 0 0 4px}.tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.3333333333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>.column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.6666666667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.3333333333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>.column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.6666666667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.3333333333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>.column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.6666666667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.3333333333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>.column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.6666666667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.3333333333%}.column.is-offset-1-mobile{margin-left:8.3333333333%}.column.is-2-mobile{flex:none;width:16.6666666667%}.column.is-offset-2-mobile{margin-left:16.6666666667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.3333333333%}.column.is-offset-4-mobile{margin-left:33.3333333333%}.column.is-5-mobile{flex:none;width:41.6666666667%}.column.is-offset-5-mobile{margin-left:41.6666666667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.3333333333%}.column.is-offset-7-mobile{margin-left:58.3333333333%}.column.is-8-mobile{flex:none;width:66.6666666667%}.column.is-offset-8-mobile{margin-left:66.6666666667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.3333333333%}.column.is-offset-10-mobile{margin-left:83.3333333333%}.column.is-11-mobile{flex:none;width:91.6666666667%}.column.is-offset-11-mobile{margin-left:91.6666666667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.3333333333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.3333333333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.6666666667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.6666666667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.3333333333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.3333333333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.6666666667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.6666666667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.3333333333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.3333333333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.6666666667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.6666666667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.3333333333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.3333333333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.6666666667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.6666666667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.3333333333%}.column.is-offset-1-touch{margin-left:8.3333333333%}.column.is-2-touch{flex:none;width:16.6666666667%}.column.is-offset-2-touch{margin-left:16.6666666667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.3333333333%}.column.is-offset-4-touch{margin-left:33.3333333333%}.column.is-5-touch{flex:none;width:41.6666666667%}.column.is-offset-5-touch{margin-left:41.6666666667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.3333333333%}.column.is-offset-7-touch{margin-left:58.3333333333%}.column.is-8-touch{flex:none;width:66.6666666667%}.column.is-offset-8-touch{margin-left:66.6666666667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.3333333333%}.column.is-offset-10-touch{margin-left:83.3333333333%}.column.is-11-touch{flex:none;width:91.6666666667%}.column.is-offset-11-touch{margin-left:91.6666666667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.3333333333%}.column.is-offset-1-desktop{margin-left:8.3333333333%}.column.is-2-desktop{flex:none;width:16.6666666667%}.column.is-offset-2-desktop{margin-left:16.6666666667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.3333333333%}.column.is-offset-4-desktop{margin-left:33.3333333333%}.column.is-5-desktop{flex:none;width:41.6666666667%}.column.is-offset-5-desktop{margin-left:41.6666666667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.3333333333%}.column.is-offset-7-desktop{margin-left:58.3333333333%}.column.is-8-desktop{flex:none;width:66.6666666667%}.column.is-offset-8-desktop{margin-left:66.6666666667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.3333333333%}.column.is-offset-10-desktop{margin-left:83.3333333333%}.column.is-11-desktop{flex:none;width:91.6666666667%}.column.is-offset-11-desktop{margin-left:91.6666666667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.3333333333%}.column.is-offset-1-widescreen{margin-left:8.3333333333%}.column.is-2-widescreen{flex:none;width:16.6666666667%}.column.is-offset-2-widescreen{margin-left:16.6666666667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.3333333333%}.column.is-offset-4-widescreen{margin-left:33.3333333333%}.column.is-5-widescreen{flex:none;width:41.6666666667%}.column.is-offset-5-widescreen{margin-left:41.6666666667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.3333333333%}.column.is-offset-7-widescreen{margin-left:58.3333333333%}.column.is-8-widescreen{flex:none;width:66.6666666667%}.column.is-offset-8-widescreen{margin-left:66.6666666667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.3333333333%}.column.is-offset-10-widescreen{margin-left:83.3333333333%}.column.is-11-widescreen{flex:none;width:91.6666666667%}.column.is-offset-11-widescreen{margin-left:91.6666666667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.3333333333%}.column.is-offset-1-fullhd{margin-left:8.3333333333%}.column.is-2-fullhd{flex:none;width:16.6666666667%}.column.is-offset-2-fullhd{margin-left:16.6666666667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.3333333333%}.column.is-offset-4-fullhd{margin-left:33.3333333333%}.column.is-5-fullhd{flex:none;width:41.6666666667%}.column.is-offset-5-fullhd{margin-left:41.6666666667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.3333333333%}.column.is-offset-7-fullhd{margin-left:58.3333333333%}.column.is-8-fullhd{flex:none;width:66.6666666667%}.column.is-offset-8-fullhd{margin-left:66.6666666667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.3333333333%}.column.is-offset-10-fullhd{margin-left:83.3333333333%}.column.is-11-fullhd{flex:none;width:91.6666666667%}.column.is-offset-11-fullhd{margin-left:91.6666666667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.3333333333%}.tile.is-2{flex:none;width:16.6666666667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.3333333333%}.tile.is-5{flex:none;width:41.6666666667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.3333333333%}.tile.is-8{flex:none;width:66.6666666667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.3333333333%}.tile.is-11{flex:none;width:91.6666666667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:#363636}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:#363636}.hero.is-light .subtitle{color:rgba(54,54,54,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:#363636}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(54,54,54,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.hero.is-light .tabs a{color:#363636;opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:#363636}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#f5f5f5}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#f5f5f5}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(245,245,245,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#f5f5f5}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(245,245,245,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#f5f5f5;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#f5f5f5}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}.docstring>header code{background-color:transparent}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label,#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}#documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}#documenter .docs-main #documenter-search-info{margin-bottom:1rem}#documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}#documenter .docs-main #documenter-search-results li{margin-left:2rem}#documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{background:#F0F0F0;color:#444}.hljs-comment{color:#888888}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} diff --git a/previews/PR490/assets/themeswap.js b/previews/PR490/assets/themeswap.js new file mode 100644 index 000000000..c58e993e3 --- /dev/null +++ b/previews/PR490/assets/themeswap.js @@ -0,0 +1,66 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Intialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if(window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the browser supports user color preference + var darkPreference = false; + // Check if the users preference is for dark color scheme + if(window.matchMedia('(prefers-color-scheme: dark)').matches === true) { + darkPreference = true; + } + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; var disabled = []; var darkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if(themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null); + // Check if the theme is primary dark theme + var isDarkTheme = (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null); + // If ss is for dark theme then set the value of darkTheme to the name of the theme + if(isDarkTheme) darkTheme = themename; + // If we find a matching theme (and it's not the default), we'll set active to non-null + if(themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if(themename !== theme) disabled.push(ss); + } + if(active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + theme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + else if(darkTheme !== null && darkPreference === true) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + darkTheme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + if (ss.ownerNode.getAttribute("data-theme-name") !== darkTheme) { + ss.disabled = true; + } + }); + } +} +set_theme_from_local_storage(); diff --git a/previews/PR490/assets/warner.js b/previews/PR490/assets/warner.js new file mode 100644 index 000000000..5531c8851 --- /dev/null +++ b/previews/PR490/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
    Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/previews/PR490/changelog/index.html b/previews/PR490/changelog/index.html new file mode 100644 index 000000000..9c57761a6 --- /dev/null +++ b/previews/PR490/changelog/index.html @@ -0,0 +1,2 @@ + +Changelog · Wflow.jl

    Changelog

    All notable changes to this project will be documented in this file.

    The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

    v0.8.1 - 2024-08-27

    Fixed

    • Reduce allocations in update of vertical SBM concept.

    v0.8.0 - 2024-08-19

    Fixed

    • Added missing BMI function get_grid_size, it is used for unstructured grids, for example to get the length of arrays returned by BMI functions get_grid_x and get_grid_y.
    • Added a check for the solution of the quadratic equation as part of the Modified Puls approach for lake outflow. Lower limit should be zero (very small negative values can occur).
    • Limit lake evaporation (added variable actevap) and lake outflow to prevent negative lake storage. The variable actevap has also been added to the reservoir module.
    • The set_states function for model type sbm with local inertial routing for river and land component.
    • Inflow to reservoir and lake locations for local inertial routing: 1) with floodplain routing, the floodplain discharge was not added to the inflow of these locations, 2) the to_river variable from overland flow and lateral subsurface flow was not added to the inflow of these locations.
    • Close netCDF NCDataset with state variables in extended BMI function save_state.
    • For the computation of Gash interception model parameter e_r multiply the precipitation input with the canopy fraction (this was only done for the potential evapotranspiration input).
    • Function BMI.update_until could throw an InexactError: Int64 caused by a not whole number, representing how many times (steps) an update of a wflow model is required. This is fixed by using divrem for the computation of the number of steps in this function. An error is thrown when the absolute remainder of divrem is larger than eps(), or when the number of steps is negative.
    • Fixed internal and external broken links in docs.
    • The internal time step of the local inertial model (stable_timestep function) can get zero when LoopVectorization is applied (@tturbo) to the for loop of these functions. This issue occured on a virtual machine, Windows 10 Enterprise, with Intel(R) Xeon(R) Gold 6144 CPU (2 processors). This has been fixed by replacing @tturbo with reduction of Polyester.jl.
    • Fixed required states of the model type sbm_gwf: added h_av for the river and land domain.
    • For the constanthead boundary of GroundwaterFlow the head should not be changed (was set to top elevation of the aquifer if head > top), and exfiltwater should be 0 for these boundary cells.

    Changed

    • Stop exposing scalar variables through BMI. The BMI.get_value_ptr function was not working correctly for scalar model variables (a view was applied). Only a few scalar model parameters are defined, and it is not expected that exposing these variables is required (e.g. for model coupling) while code changes for these variables (including struct fields) are required.
    • The local inertial routing (constant) river boundary condition depth at a ghost node (downstream river outlet) was set at 0.0 in the code and can now be provided through the model parameter netCDF file (riverdepth_bc). In addition, the boundary condition river length dl at a ghost node should be set through the model parameter netCDF file (riverlength_bc), providing this boundary condition through the [model] settings in the TOML file (model.riverlength_bc) has been deprecated.
    • As part of the vertical SBM concept: 1) add variable net_runoff (land runoff minus actual open water evaporation ae_openw_l) and 2) change the definition of variable runoff by removing the subtraction of ae_openw_l (total land runoff). The variable net_runoff is now input to the kinematic wave for overland flow (replaces the original runoff variable as input). The lower limit of the original runoff variable was set at zero, which may result in water balance errors. This lower limit was implemented in the Python version of wflow_sbm, to avoid a very slow kinematic wave solution for surface flow computation (no distinction between a kinematic wave for overland and river flow). When in the Python version of wflow_sbm the kinematic wave for surface flow was split into a river and land component, the lower limit was removed for river runoff (net_runoff_river), but not for land runoff.
    • Always use fractions for the computation of potential evapotranspiration (interception and transpiration) and potential evaporation (open water and soil). Replaced variable et_reftopot by crop coefficient kc (use of et_reftopot has been deprecated).
    • For improved code readability it is now discouraged to use non-ASCII characters for the names of variables, structs, functions and macros. Using the non-ASCII character for built-in operators is still allowed. This change in naming convention is now in effect and all invalid uses of non-ASCII characters have been replaced by ASCII equivalents.
    • Docs: 1) improved description of different model configurations in model-setup.md, also in relation to hydromt_wflow in docs, 2) citing info related to wflow_sbm publication in Geosci. Model Dev. (from in review to published).
    • Root water uptake reduction (Feddes): 1) extend critical pressure head parameters with h3_low and h3_high, 2) all critical pressure head parameters can be set (values for h1, h2 and h3 were fixed) and 3) the root water uptake reduction coefficient $\alpha$ can be set at 0 (default is 1) at critical pressure head h1 (through the model parameter alpha_h1).
    • For the actual transpiration computation in SBM, the potential transpiration is partitioned over the soil layers with roots according to the model parameter rootfraction (fraction of the total root length in a soil layer). Previously, for each soil layer (from top to bottom) the actual transpiration was computed, and the remaining potential transpiration was used in the next soil layer.

    Added

    • Total water storage as an export variable for SBM concept. This is the total water stored per grid cell in millimeters. Excluded from this variable are the floodplain, lakes and reservoirs.
    • Checks to see if all states are covered in the .toml file. If not all states are covered, an error is thrown. If there are more states specified than required, these states are ignored (with a warning in the logging), and the simulation will continue.
    • Support different vertical hydraulic conductivity profiles for the SBM concept. See also the following sections: The SBM soil water accounting scheme and Subsurface flow routing for a short description.
    • Local inertial routing to sbm_gwf model type.
    • Water demand and allocation computations for model types sbm and sbm_gwf.

    v0.7.3 - 2024-01-12

    Fixed

    • Documentation: add leakage term to the wflow_sbm figure, document external input parameter ksathorfrac and fix description of adding external inflow to the kinematic wave.
    • Fixed BMI functions (e.g. BMI.get_value) that deviated from BMI specifications (BasicModelInterface.jl), including function arguments, return types and the BMI specification that arrays are always flattened (this was not the case for variables stored as 2-dimensional arrays or as vector of SVectors).
    • Bump compat for NCDatasets to 0.13, 0.14.
    • The solution for lake outflow as part of the Modified Puls Approach. The inflow and outflow variables are defined for period Δt, and not at t1 and t2 (instantaneous) as in the original mass balance equation of the Modified Puls Approach. Because of this, the terms of the quadratic equation (and solution) were fixed.
    • Use kvfrac for the computation of vertical saturated hydraulic conductivity at the bottom of the soil layer, since kvfrac is also used for the computation of vertical unsaturated flow.

    Changed

    • For cyclic parameters different cyclic time inputs are supported (only one common cyclic time (for example daily or monthly) was allowed).
    • BMI: 1) added grid information (type and location) and whether a variable can be exchanged to metadata Structs, 2) extend model grid functions for wflow components that store variables on edges (local inertial model) with get_grid_edge_count and get_grid_edge_nodes.

    Added

    • Functions for loading and saving states and getting the starttime in Unix time format. This is convenient for coupling with OpenDA (and other external) software. The set states functionality from the initialization function has been moved to a separate set_states function for each Model type, to support loading states independent of initialization.

    v0.7.2 - 2023-09-27

    Fixed

    • Water balance of modified Rutter interception model. The sum of the stemflow partitioning coefficient pt and free throughfall coefficient p could get larger than 1, resulting in an overestimation of stemflow and throughfall amounts and negative net interception amounts. And the first drainage amount dd, controlled by a change over time in canopy storage capacity cmax, should not be subtracted from precipitation to compute net interception.
    • The netinterception (net interception) computed by the modified Rutter interception model was stored as interception in SBM, while this should be the interception (interception loss by evaporation) output of the modified Rutter interception model. The interception of SBM is used to compute the total actual evapotranspiration actevap.

    v0.7.1 - 2023-06-30

    Fixed

    • State initialization of 1D floodplain volume. In the initialization function the wrong field name of type FloodPlainProfile was used (area instead of a).

    v0.7.0 - 2023-06-12

    Fixed

    • BMI.get_time_units now gets called on the model rather than the type, like all other BMI functions, except BMI.initialize. Also it returns "s" instead of "seconds since 1970-01-01T00:00:00", in line with the BMI specification.
    • Added the interception component to total actual evapotranspiration actevap of SBM (was defined as the sum of soil evaporation, transpiration and open water evaporation).

    Changed

    • The time values returned in the BMI interface are no longer in seconds since 1970, but in seconds since the model start time. This is more in line with standard BMI practices.
    • The starttime was defined one model timestep Δt ahead of the actual model time (the initial conditions timestamp (state time)). As a consequence this was also the case for the current model time. To allow for an easier interpretation of wflow time handling, either through BMI or directly, the starttime is now equal to the state time, resulting in current model times without an offset.
    • Using more than 8 threads can result in too much overhead with Threads.@threads. After performance testing, this has been changed for kinematic wave routing and the vertical SBM concept to spawning tasks with Threads@spawn for number of threads <= 8, where each task iterates over a chunk of size basesize. For more than 8 threads the low overhead threading Polyester.@batch (including the minbatch argument) is used. For local inertial routing the use of Threads.@threads has been changed to threaded loop vectorization (river and 1D floodplain local inertial momentum equation) and Polyester.@batch.

    Added

    • For (regulated) lakes with rating curve of type 1 (H-Q table), lake storage above the maximumstorage (based on maximum water level from the H-Q table) is spilled instantaneously (overflow) from the lake.
    • Added support to use sum as a reducer function for csv and scalar output options.

    v0.6.3 - 2023-03-01

    Fixed

    • Removed error when _FillValue is present in the time dimension of the forcing netCDF file. The simulation is allowed to continue with the attribute present, given that there are no missing values in the time dimension. This is checked by the code, and an error is thrown if this is the case.
    • Column index of daily lake rating curves. This was incorrectly based on dayofyear with a maximum of 365. The column index should be based on julian day (leap days are not counted).

    Changed

    • NCDatasets version. Reading the time dimension of multifile netCDF file became very slow since NCDatasets v0.12.4, this issue has been solved in v0.12.11.
    • Store the time dimension of the forcing netCDF file as part of the struct NCreader instead of calling dataset["time"][:] each time step when loading forcing data.

    Added

    • Show total duration of simulation in the log file (info), and show the current time at execution of each timestep (debug).
    • Support for exponential decline in horizontal conductivity in the sbm_gwf concept. This can be enabled using the conductivity_profile setting (either "uniform" or "exponential"). If set to "exponential", it exponentially reduces the kh0 (or conductivity) based on the value of gwf_f to the actual horizontal conductivity (k).
    • An optional 1D floodplain schematization for the river flow inertial model, based on provided flood volumes as a function of flood depth per river cell. See also the following sections: SBM + Local inertial river and River and floodplain routing for a short description, and the following section for associated model parameters.

    v0.6.2 - 2022-09-01

    Fixed

    • Two issues related to reservoir and lake locations as part of local inertial model: 1) added as boundary points to the update of overland flow, 2) fixed check reservoir and lake location in update river flow.
    • Limit flow (qx, qy and q) in local inertial model when water is not available (set to zero).
    • In the grid output netCDFs, don't set the _FillValue attribute, since the CF conventions don't allow it.
    • Glacier parameter g_sifrac needs to be converted during initialization (time dependent).
    • The check that the sum of adaptive timesteps (Δt) of the local inertial model (1D and 2D) does not exceed the model timestep.

    Changed

    • Changed depth h for reservoir and lake locations as part of the river local inertial model from bankfull_depth to zero.

    Added

    v0.6.1 - 2022-04-26

    Fixed

    • Fixed an error with the log file, when writing to a folder that does not (yet) exists. Now, the folder is created prior to writing the log file.
    • Fixed a MethodError for read_dims, thrown when reading netCDF data with NCDatasets.jl 0.12.3 or higher.

    v0.6.0 - 2022-04-14

    Added

    • The FLEXTopo model.
    • Set a (different) uniform value for each index of input parameters with an extra dimension. A list of values (instead of one uniform value) that should be equal to the length of the extra dimension can be provided in the TOML file. See also Modify parameters.
    • Modify input parameters with an extra dimension at multiple indices with different scale and offset values, through the TOML file. See also Modify parameters.
    • Added support for netCDF compression for gridded model output, through the option compressionlevel in the [output] section in the TOML file. The setting defaults to 0 (no compression), but all levels between 0 and 9 can be used.

    Changed

    • Re-organized the documentation: moved explanation of different model concepts to a model documentation section, added a user guide to explain setting up the model, added new figures to the description of wflow_sbm.
    • The unit of lateral subsurface flow ssf of LateralSSF is now $m^3 d^{-1}$. The unit was $m^3 t^{-1}$, where $t$ is the model timestep. Other flow variables are already stored independently from $t$, this allows for easier interpretation and to use states independently of $t$.
    • Changed the reference level of water depth h and h_av of 2D overland flow (ShallowWaterLand) for cells containing a river from river bed elevation zb to cell elevation z.

    Fixed

    • Fixed calculation of average water depth h_av of 2D overland flow (ShallowWaterLand) with the local inertial approach. The summation of h was not correct, resulting in too low values for h_av. For river cells of 2D overland flow h_av was only updated as part of the river domain (ShallowWaterRiver), this value is now also updated as part of the land domain (ShallowWaterLand).
    • Fixed the following two flow width issues for 2D overland flow of the local inertial model: 1) The flow widths xwidth and ywidth were mapped incorrectly (reversed) to the flow calculation in x and y direction, respectively. 2) For river cells the effective flow width for overland flow was not determined correctly: the riverwidth vector supplied to the function set_effective_flowwidth! covered the complete model domain and should have covered the river domain, resulting in incorrect river widths and thus incorrect effective flow widths for river cells.

    v0.5.2 - 2022-02-03

    Changed

    • Model types sbm_gwf and hbv use the same approach for the calculation of the drain width dw as model type sbm.
    • Renamed h_bankfull parameter to bankfull_depth for consistency between kinematic-wave and local-inertial river routing. When using the old name under the [input.lateral.river] section of the TOML file, it will work but it is suggested to update the name.

    Added

    Fixed

    • Model type hbv: the surface width for overland flow was not corrected with the river width.
    • Fixed use of absolute path for path_forcing in TOML file, which gave an error in wflow v0.5.1.
    • Fixed a crash when glacier processes are simulated as part of the hbv concept (Δt was not defined).
    • When the surface flow width for overland flow is zero, the water level h of the kinematic wave should not be calculated, otherwise this results in NaN values. When the model is initialized from state files, q and h are set to zero for indices with a zero surface flow width.
    • Fixed how number of iterations its for kinematic wave river flow are calculated during initialization when using a fixed sub-timestep (specified in the TOML file). For a model timestep smaller than the fixed sub-timestep an InexactError was thrown.
    • Fixed providing a cyclic parameter when the netCDF variable is read during model initialization with ncread, this gave an error about the size of the netCDF time dimension.
    • Fixed CSV and netCDF scalar output of variables with dimension layer (SVector).

    v0.5.1 - 2021-11-24

    Fixed

    • Fixed calculation of exfiltwater as part of the sbm_gwf model type. This was based directly on groundwater head above the surface level, without multiplying by the specific_yield, resulting in an overestimation of exfiltwater. This is required since the groundwater model estimates the head by dividing the volume by the specific yield or storativity of the aquifer. So, should the groundwater table rise above surface level, the head above surface level does not represent a water column one to one. (This also means the groundwater model (slightly) overestimates heads when the head rises above the surface level. However, this water is immediately removed, and the head will be set to surface level.)

    Added

    • Optional dir_input and dir_output keys in the TOML, which can be used to quickly change the path for all input or output files that are given as a relative path.

    v0.5.0 - 2021-11-12

    Changed

    • Scaling of potential capillary rise is replaced by a common approach found in literature, based on the water table depth zi, a maximum water depth cap_hmax beyond which capillary rise ceases, and a coefficient cap_n. See also Capillary rise. Multiplying the scaling factor with the ratio of model time step and basetimestep in the original approach resulted in (much) smaller capillary fluxes at sub-daily model time steps compared to daily model time steps, and is not used in the new approach. Parameters cap_hmax and cap_n can be set through the TOML file, parameter capscale of the previous approach is not used anymore.

    Fixed

    • Conversion of GroundwaterFlow boundaries [$m^3 d^{-1}$] as part of model concept sbm_gwf to $m^3 s^{-1}$ for sub-daily model time steps. For the conversion the basetimestep (86400 s) should be used (and not the model time step).

    v0.4.1 - 2021-11-04

    Changed

    • The $\alpha$ parameter of the kinematic wave has a fixed value now and is not updated because of changes in water height (this could result in large water balance errors). See also Surface routing.
    • Cyclic input for other structs than vertical are also now supported (for example cyclic inflow to the river).
    • Moved update_forcing! and update_cyclic! functions to the run function. It is now easier to implement a custom run function with custom loading of input data (forcing and cyclic parameters).

    Added

    • Check if reservoirs and lakes have downstream nodes. Without downstream nodes is not supported and in that case an error message is thrown that is easier to understand than the previous one: "ArgumentError: Collection is empty, must contain exactly 1 element."
    • For the input.path_forcing TOML setting we use Glob.jl to expand strings like "data/forcing-year-*.nc" to a set of netCDF files that are split in time.
    • External water inflow (supply/abstractions) added to the kinematic wave inflow in m3/s. It is added/removed to sf.qlat[v] before computing the new q[v] with the kinematic wave equation.
    • Fixed values for forcing parameters are supported, see also Fixed forcing values.

    Added

    Fixed

    • River inflow for reservoirs and lakes in the kinematic wave. This inflow was based on sf.q[v] at the previous time step, and this has been fixed to the current time step.

    v0.4.0 - 2021-09-02

    Changed

    • Changed length units for lateral subsurface flow component from millimeter to meter. This means that state netCDF files from previous versions can only be reused if ssf is divided by 10^9.
    • Add snow and glacier processes to wflow_sbm figure of the documentation.

    Added

    • Multi-threading of vertical SBM concept and lateral kinematic wave components (overland, river and subsurface flow) of wflow_sbm model SBM + Kinematic wave.
    • Improved error message for CSV Reducer.
    • The TOML keys kv₀, θᵣ and θₛ have been replaced with the ASCII versions kv_0, theta_r and theta_s, to avoid encoding issues with certain text editors. The old keys still work as well.

    Fixed

    • Calculation of volumetric water content of vertical SBM (soil layers and root zone).
    • Update of satwaterdepth in SBM (evaporation was only subtracted from a local variable, and not from sbm.satwaterdepth).
    • Fixed the index lowerlake_ind of NaturalLake. Linked lakes were not simulated correctly (flows between upstream and downstream lake).
    • Interpolation function interpolate_linear(x, xp, fp) for CSV tables lakes. When x was larger or smaller than xp, maximum(xp) or minimum(xp) was returned instead of maximum(fp) or minimum(fp).
    • Fixed model timestep of reservoirs (SimpleReservoir) and lakes (NaturalLake) in relation to precipitation and evapotranspiration fluxes. This was set to the fixed wflow basetimestep of 86400 s, and should be set to the actual model time step from the TOML configuration file.
    • Add flux from Drainage (GroundwaterFlow) in the sbm_gwf_model to the overland flow component instead of the river component of the kinematic wave.
    • Fixed option constanthead = false (TOML file), constant_head field of GroundwaterFlow was not defined in this case. Fixed this by initializing empty fields (Vector) for struct ConstantHead.
    • Fixed return max(0, boundary.flux[index]) to return max(0, flux) the flux should be returned when cell is dry, no negative value allowed.
    • Fixed path to initialize lake to: dirname(static_path)
    • Fixed outflow = 0, when lake level is below lake threshold. Before a negative value could enter the log function and model would fail.
    • Fixed the lake storage initialization. For continuation runs (reinit = false), this caused the lake to be reset to the initial conditions instead of the saved state.

    v0.3.1 - 2021-05-19

    Fixed

    • Ignore extra dimensions in input netCDFs if they are size 1

    v0.3.0 - 2021-05-10

    Changed

    • New deposition process for coarse sediment in the reservoirs with a new parameter restrapefficiency in the sediment model.
    • New variables added to the LandSediment and RiverSediment structs in order to save more output from the sediment model.
    • Added variables volume and inwater to SurfaceFlow struct, this is convenient for the coupling with the water quality model Delwaq.
    • River water level (h) and discharge (q) forced directly into the RiverSediment struct (instead of using the OverlandFlowSediment struct first).
    • Require Julia 1.6 or later.

    Added

    • Modify model parameters and forcing through the TOML file (see Modify parameters).
    • Run wflow_sbm (SBM + kinematic wave) in two parts (until recharge and after subsurface flow) from BMI, including the option to switch off the lateral subsurface component of wflow_sbm.
    • Support more netCDF dimension and axis order variants.

    Fixed

    • Corrected a bug in sediment deposition in the river (case when incoming sediment load is more than the river transport capacity).
    • Fixed update of snow and glacierstore fields of HBV and SBM concepts by the glacier_hbv module.

    v0.2.0 - 2021-03-26

    Changed

    • Removed dependency of the f model parameter of wflow_sbm on the parameters $\theta_{s}$, $\theta_{r}$ and $M$. This approach is used in Topog_SBM, but not applicable for wflow_sbm. The f parameter needs to be provided as part of the netCDF model parameter file.
    • Grid properties as cell length and elevation now stored as part of the model.land.network component and not as part of the vertical model components, as it is not used by these components. altitude (elevation) should now be provided as part of the [input] section of the TOML configuration file, and not as part of the [input.vertical] section.
    • Removed parameter $\theta_{e}$ from SBM struct (not used in update). Parameters $\theta_{s}$ and $\theta_{r}$ included separately (instead of $\theta_{e}$) in LateralSSF struct, now directly linked to SBM parameters.
    • Improve error messages (netCDF and cyclic flow graph).

    Added

    • Export of netCDF scalar timeseries (separate netCDF file from gridded timeseries). This also allows for importing these timeseries by Delft-FEWS (General Adapter).

    Fixed

    • Model parameter Manning's n now used during the update of the struct SurfaceFlow, to change the related $\alpha$ parameter of the kinematic wave for channel flow.
    diff --git a/previews/PR490/images/case_flifs_1.png b/previews/PR490/images/case_flifs_1.png new file mode 100644 index 000000000..3a4752c28 Binary files /dev/null and b/previews/PR490/images/case_flifs_1.png differ diff --git a/previews/PR490/images/case_flifs_2.png b/previews/PR490/images/case_flifs_2.png new file mode 100644 index 000000000..e1d7463f4 Binary files /dev/null and b/previews/PR490/images/case_flifs_2.png differ diff --git a/previews/PR490/images/case_mfa_1.png b/previews/PR490/images/case_mfa_1.png new file mode 100644 index 000000000..2c93ee3f9 Binary files /dev/null and b/previews/PR490/images/case_mfa_1.png differ diff --git a/previews/PR490/images/case_mfa_3.png b/previews/PR490/images/case_mfa_3.png new file mode 100644 index 000000000..7883383ba Binary files /dev/null and b/previews/PR490/images/case_mfa_3.png differ diff --git a/previews/PR490/images/case_rhine_meuse.png b/previews/PR490/images/case_rhine_meuse.png new file mode 100644 index 000000000..c3ab1af7e Binary files /dev/null and b/previews/PR490/images/case_rhine_meuse.png differ diff --git a/previews/PR490/images/flextopo_julia_1class.png b/previews/PR490/images/flextopo_julia_1class.png new file mode 100644 index 000000000..cb662a324 Binary files /dev/null and b/previews/PR490/images/flextopo_julia_1class.png differ diff --git a/previews/PR490/images/flextopo_julia_3class.png b/previews/PR490/images/flextopo_julia_3class.png new file mode 100644 index 000000000..dd8175800 Binary files /dev/null and b/previews/PR490/images/flextopo_julia_3class.png differ diff --git a/previews/PR490/images/hbv-soilmoist.png b/previews/PR490/images/hbv-soilmoist.png new file mode 100644 index 000000000..1e6e3ed7d Binary files /dev/null and b/previews/PR490/images/hbv-soilmoist.png differ diff --git a/previews/PR490/images/hbv-upper.png b/previews/PR490/images/hbv-upper.png new file mode 100644 index 000000000..4aae2eb12 Binary files /dev/null and b/previews/PR490/images/hbv-upper.png differ diff --git a/previews/PR490/images/hbv96.png b/previews/PR490/images/hbv96.png new file mode 100644 index 000000000..aa95d9f6e Binary files /dev/null and b/previews/PR490/images/hbv96.png differ diff --git a/previews/PR490/images/lake.png b/previews/PR490/images/lake.png new file mode 100644 index 000000000..751080c98 Binary files /dev/null and b/previews/PR490/images/lake.png differ diff --git a/previews/PR490/images/numerical_scheme_almeida.png b/previews/PR490/images/numerical_scheme_almeida.png new file mode 100644 index 000000000..3744fc7de Binary files /dev/null and b/previews/PR490/images/numerical_scheme_almeida.png differ diff --git a/previews/PR490/images/paddy_profile.png b/previews/PR490/images/paddy_profile.png new file mode 100644 index 000000000..39a134503 Binary files /dev/null and b/previews/PR490/images/paddy_profile.png differ diff --git a/previews/PR490/images/river-scheme.png b/previews/PR490/images/river-scheme.png new file mode 100644 index 000000000..46cdac7f8 Binary files /dev/null and b/previews/PR490/images/river-scheme.png differ diff --git a/previews/PR490/images/sbm_ksat_profiles.png b/previews/PR490/images/sbm_ksat_profiles.png new file mode 100644 index 000000000..6e6bbeda2 Binary files /dev/null and b/previews/PR490/images/sbm_ksat_profiles.png differ diff --git a/previews/PR490/images/snowfall.png b/previews/PR490/images/snowfall.png new file mode 100644 index 000000000..741eaaa0d Binary files /dev/null and b/previews/PR490/images/snowfall.png differ diff --git a/previews/PR490/images/snowmelt.png b/previews/PR490/images/snowmelt.png new file mode 100644 index 000000000..b413b5186 Binary files /dev/null and b/previews/PR490/images/snowmelt.png differ diff --git a/previews/PR490/images/soil_caprise.png b/previews/PR490/images/soil_caprise.png new file mode 100644 index 000000000..145a07a06 Binary files /dev/null and b/previews/PR490/images/soil_caprise.png differ diff --git a/previews/PR490/images/soil_evap.png b/previews/PR490/images/soil_evap.png new file mode 100644 index 000000000..60aaa8ea4 Binary files /dev/null and b/previews/PR490/images/soil_evap.png differ diff --git a/previews/PR490/images/soil_frozeninfilt.png b/previews/PR490/images/soil_frozeninfilt.png new file mode 100644 index 000000000..177e378b7 Binary files /dev/null and b/previews/PR490/images/soil_frozeninfilt.png differ diff --git a/previews/PR490/images/soil_rootwateruptake.png b/previews/PR490/images/soil_rootwateruptake.png new file mode 100644 index 000000000..6fea6d3c1 Binary files /dev/null and b/previews/PR490/images/soil_rootwateruptake.png differ diff --git a/previews/PR490/images/soil_unsatevap.png b/previews/PR490/images/soil_unsatevap.png new file mode 100644 index 000000000..d3247c4ef Binary files /dev/null and b/previews/PR490/images/soil_unsatevap.png differ diff --git a/previews/PR490/images/soil_wetroots.png b/previews/PR490/images/soil_wetroots.png new file mode 100644 index 000000000..8246ac05c Binary files /dev/null and b/previews/PR490/images/soil_wetroots.png differ diff --git a/previews/PR490/images/soilloss-scheme.png b/previews/PR490/images/soilloss-scheme.png new file mode 100644 index 000000000..395a8c917 Binary files /dev/null and b/previews/PR490/images/soilloss-scheme.png differ diff --git a/previews/PR490/images/wflow_sbm_soil.png b/previews/PR490/images/wflow_sbm_soil.png new file mode 100644 index 000000000..8cea8db3c Binary files /dev/null and b/previews/PR490/images/wflow_sbm_soil.png differ diff --git a/previews/PR490/images/wflow_sediment.png b/previews/PR490/images/wflow_sediment.png new file mode 100644 index 000000000..5ea773c56 Binary files /dev/null and b/previews/PR490/images/wflow_sediment.png differ diff --git a/previews/PR490/index.html b/previews/PR490/index.html new file mode 100644 index 000000000..959bc6550 --- /dev/null +++ b/previews/PR490/index.html @@ -0,0 +1,2 @@ + +About wflow · Wflow.jl

    About wflow

    Wflow is Deltares' solution for modelling hydrological processes, allowing users to account for precipitation, interception, snow accumulation and melt, evapotranspiration, soil water, surface water, groundwater recharge, and water demand and allocation in a fully distributed environment. Successfully applied worldwide for analyzing flood hazards, drought, climate change impacts and land use changes, wflow is growing to be a leader in hydrology solutions. Wflow is conceived as a framework, within which multiple distributed model concepts are available, which maximizes the use of open earth observation data, making it the hydrological model of choice for data scarce environments. Based on gridded topography, soil, land use and climate data, wflow calculates all hydrological fluxes at any given grid cell in the model at a given time step.

    Wflow was born out of the creation of Deltares in 2008, when a strategic review identified the need for a distributed hydrological model to allow the simulation of flows at the catchment scale. With the intention being to encourage greater scientific collaboration. For this reason:

    • Wflow is free and open source software.
    • Wflow is easily coupled with other models and software applications.
    • Contribution to the wflow code development is encouraged.

    From 2021 the wflow code is distributed under the MIT License. Wflow is also available as a compiled executable under the Deltares terms and conditions. The wflow computational engine is built in the Julia language, a high-performance computing language. Wflow does not include a graphical user interface and is designed for maximum user flexibility. Prior to 2021, wflow was developed in Python on top of the PCRaster Python extension. The Python version is still available, but not actively developed.

    diff --git a/previews/PR490/intro/publications/index.html b/previews/PR490/intro/publications/index.html new file mode 100644 index 000000000..0ceb4be10 --- /dev/null +++ b/previews/PR490/intro/publications/index.html @@ -0,0 +1,2 @@ + +Publications · Wflow.jl

    Publications

    Citing wflow

    For publications, please cite the following paper introducing Wflow.jl and describing the wflow_sbm concept, together with some case studies:

    van Verseveld, W. J., Weerts, A. H., Visser, M., Buitink, J., Imhoff, R. O., Boisgontier, H., Bouaziz, L., Eilander, D., Hegnauer, M., ten Velden, C., and Russell, B., 2024. Wflow_sbm v0.7.3, a spatially distributed hydrological model: from global data to local applications. Geosci. Model Dev., 17, 3199–3234. https://doi.org/10.5194/gmd-17-3199-2024.

    To cite a specific software version please use the DOI provided in the Zenodo badge DOI, that points to the latest release. The DOIs of previous versions are also available at Zenodo. If you use a snapshot of the development (without a DOI) please cite as follows:

    van Verseveld, Willem, Visser, Martijn, Buitink, Joost, Bouaziz, Laurène, Boisgontier, Hélène, Bootsma, Huite, Weerts, Albrecht, Baptista, Carlos Fernando, Pronk, Maarten, Eilander, Dirk, Hartgring, Sebastian, Dalmijn, Brendan, Hofer, Julian, Hegnauer, Mark, & Mendoza, Raul, (YEAR). Deltares/Wflow.jl: unstable-master. https://github.com/Deltares/Wflow.jl, obtained: DATE_OF_DOWNLOAD.

    Publications using wflow

    Peer reviewed journal papers

    Aerts, J. P. M., Hut, R. W., van de Giesen, N. C., Drost, N., van Verseveld, W. J., Weerts, A. H., and Hazenberg, P., 2022. Large-sample assessment of varying spatial resolution on the streamflow estimates of the wflow_sbm hydrological model. Hydrol. Earth Syst. Sci., 26, 4407–4430. https://doi.org/10.5194/hess-26-4407-2022.

    de Boer-Euser, T., Bouaziz, L., De Niel, J., Brauer, C., Dewals, B., Drogue, G., Fenicia, F., Grelier, B., Nossent, J., Pereira, F., Savenije, H., Thirel, G., Willems, P., 2017. Looking beyond general metrics for model comparison – lessons from an international model intercomparison study. Hydrol. Earth Syst. Sci. 21, 423–440. https://doi:10.5194/hess-21-423-2017.

    Bouaziz, L.J.E., Fenicia, F., Thirel, G., de Boer-Euser, T., Buitink, J., Brauer, C.C., De Niel, J., Dewals, B.J., Drogue, G., Grelier, B., Melsen, L. A., Moustakas, S., Nossent, J., Pereira, F., Sprokkereef, E., Stam, J., Weerts, A.H., Willems, P., Savenije, H.H.G., Hrachowitz, M., 2021. Behind the scenes of streamflow model performance. Hydrol. Earth Syst. Sci., 25, 1069–1095. https://doi.org/10.5194/hess-25-1069-2021.

    Bouaziz, L. J. E., Aalbers, E. E., Weerts, A. H., Hegnauer, M., Buiteveld, H., Lammersen, R., Stam, J., Sprokkereef, E., Savenije, H. H. G., and Hrachowitz, M., 2022. Ecosystem adaptation to climate change: the sensitivity of hydrological predictions to time-dynamic model parameters, Hydrol. Earth Syst. Sci., 26, 1295–1318. https://doi.org/10.5194/hess-26-1295-2022.

    Casson, D. R., Werner, M., Weerts, A., and Solomatine, D., 2018. Global re-analysis datasets to improve hydrological assessment and snow water equivalent estimation in a sub-Arctic watershed. Hydrol. Earth Syst. Sci., 22, 4685–4697. https://doi.org/10.5194/hess-22-4685-2018.

    Droppers, B., Rakovec, O., Avila, L., Azimi, S., Cortés-Torres N., De León Pérez, D., Imhoff, R., Francés, F., Kollet, S., Rigon, R., Weerts, A. & Samaniego, L, 2024. Multi-model hydrological reference dataset over continental Europe and an African basin. Sci Data, 11, 1009. https://doi.org/10.1038/s41597-024-03825-9.

    Emerton, R.E., Stephens, E.M., Pappenberger, F., Pagano, T.C., Weerts, A.H., Wood, A.W., Salamon, P., Brown, J.D., Hjerdt, N., Donnelly, C., Baugh, C.A., Cloke, H.L., 2016. Continental and global scale flood forecasting systems. WIREs Water 3, 391–418. https://doi.org/10.1002/wat2.1137.

    Gebremicael, T.G., Mohamed, Y.A., Van der Zaag, P., 2019. Attributing the hydrological impact of different land use types and their long-term dynamics through combining parsimonious hydrological modelling, alteration analysis and PLSR analysis. Science of The Total Environment, 660, 1155-1167, https://doi.org/10.1016/jscitotenv.2019.01.085.

    Giardino, A., Schrijvershof, R., Nederhoff, C.M., de Vroeg, H., Brière, C., Tonnon, P.-K., Caires, S., Walstra, D.J., Sosa, J., van Verseveld, W., Schellekens, J., Sloff, C.J., 2018. A quantitative assessment of human interventions and climate change on the West African sediment budget, Ocean & Coastal Management, 156, 249-265. https://doi.org/10.1016/j.ocecoaman.2017.11.008.

    Hally, A., Caumont, O., Garrote, L., Richard, E., Weerts, A., Delogu, F., Fiori, E., Rebora, N., Parodi, A., Mihalović, A., Ivković, M., Dekić, L., van Verseveld, W., Nuissier, O., Ducrocq, V., D’Agostino, D., Galizia, A., Danovaro, E., Clematis, A., 2015. Hydrometeorological multi-model ensemble simulations of the 4 November 2011 flash flood event in Genoa, Italy, in the framework of the DRIHM project. Nat. Hazards Earth Syst. Sci. 15, 537–555. https://doi:10.5194/nhess-15-537-2015.

    Hassaballah, K., Mohamed, Y., Uhlenbrook, S., and Biro, K., 2017. Analysis of streamflow response to land use and land cover changes using satellite data and hydrological modelling: case study of Dinder and Rahad tributaries of the Blue Nile (Ethiopia–Sudan), Hydrol. Earth Syst. Sci., 21, 5217–5242. https://doi.org/10.5194/hess-21-5217-2017.

    Imhoff, R.O., Buitink, J., van Verseveld, W.J., Weerts, A.H., 2024. A fast high resolution distributed hydrological model for forecasting, climate scenarios and digital twin applications using wflow_sbm. Environmental Modelling & Software, 179, 106099. https://doi.org/10.1016/j.envsoft.2024.106099

    Imhoff, R.O, van Verseveld, W.J., van Osnabrugge, B., Weerts, A.H., 2020. Scaling Point-Scale (Pedo)transfer Functions to Seamless Large-Domain Parameter Estimates for High-Resolution Distributed Hydrologic Modeling: An Example for the Rhine River. Water Resources Research, 56, e2019WR026807. https://doi.org/10.1029/2019WR026807.

    Imhoff, R.O., van Verseveld, W., van Osnabrugge, B., Weerts, A.H., 2020. Ruimtelijk schaalbare hydrologische modelparameters uit open-source omgevingsdata: een voorbeeld voor de Rijn. Stromingen: vakblad voor hydrologen, 26(3), 19-36 https://edepot.wur.nl/540682.

    Jeuken, A., Bouaziz, L., Corzo, G., Alfonso, L., 2016. Analyzing Needs for Climate Change Adaptation in the Magdalena River Basin in Colombia, in: Filho, W.L., Musa, H., Cavan, G., O’Hare, P., Seixas, J. (Eds.), Climate Change Adaptation, Resilience and Hazards, Climate Change Management. Springer International Publishing, pp. 329–344 https://doi.org/10.1007/978-3-319-39880-8.

    López López, P., Wanders, N., Schellekens, J., Renzullo, L.J., Sutanudjaja, E.H., Bierkens, M.F.P., 2016. Improved large-scale hydrological modelling through the assimilation of streamflow and downscaled satellite soil moisture observations. Hydrol. Earth Syst. Sci., 20, 3059–3076. https://doi.org/10.5194/hess-20-3059-2016.

    Pranoto, B., Soekarno, H., Hartulistiyoso, E., Nur Aidi, M., Sutrisno, D., Pohan, D., Radhika, Sutejo, B., Heru Kuncoro, A., Nahib, I., 2024. Integrating Flood Early Warning System (FEWS) for Optimizing Small Hydropower Sites: A West Java Case Study. EVERGREEN Joint Journal of Novel Carbon Resource Sciences & Green Asia Strategy, 11, 3, 2691-2699. https://www.tj.kyushu-u.ac.jp/evergreen/contents/EG2024-11_3_content/pdf/p2691-2699.pdf

    Rakovec, O., Weerts, A.H., Sumihar, J., Uijlenhoet, R., 2015. Operational aspects of asynchronous filtering for flood forecasting. Hydrol. Earth Syst. Sci., 19, 2911–2924, https://doi.org/10.5194/hess-19-2911-2015.

    Ratri, D.N., A.H. Weerts, R. Muharsyah, K. Whan, A. Klein Tank, E. Aldrian, M. H. Hariadi, Calibration of ECMWF SEAS5 based streamflow forecast in Seasonal hydrological forecasting for Citarum river basin, West Java, Indonesia, Journal of Hydrology: Regional Studies,45,101305, https://doi.org/10.1016/j.ejrh.2022.101305.

    Rusli, S.R., A.H. Weerts, A. Taufiq, V. Bense, 2021. Estimating water balance components and their uncertainty bounds in highly groundwater-dependent and data-scarce area: An example for the Upper Citarum basin, J. Hydrol. Regional Studies, https://doi.org/10.1016/j.ejrh.2021.100911.

    Rusli, S.R., V.F. Bense, A. Taufiq, A.H. Weerts,2023. Quantifying basin-scale changes in groundwater storage using GRACE and one-way coupled hydrological and groundwater flow model in the data-scarce Bandung groundwater Basin, Indonesia, Groundwater for Sustainable Development,22, 100953, https://doi.org/10.1016/j.gsd.2023.100953.

    Rusli, S.R., A.H. Weerts, S.M.T. Mustafa, D.E. Irawan, A. Taufiq, V.F. Bense, 2023. Quantifying aquifer interaction using numerical groundwater flow model evaluated by environmental water tracer data: Application to the data-scarce area of the Bandung groundwater basin, West Java, Indonesia, Journal of Hydrology: Regional Studies, 50, https://doi.org/10.1016/j.ejrh.2023.101585.

    Schaller, N., Sillmann, J., Müller, M., Haarsma, R., Hazeleger, W., Hegdahl, T.J., Kelder, T., van den Oord, G., Weerts, A., Whan, K., 2020. The role of spatial and temporal model resolution in a flood event storyline approach in western Norway. Weather and Climate Extremes, doi: https://doi.org/10.1016/j.wace.2020.100259.

    Seizarwati, W. and M. Syahidah, 2021. Rainfall-Runoff Simulation for Water Availability Estimation in Small Island Using Distributed Hydrological Model wflow. IOP Conf. Ser.: Earth Environ. Sci., 930,012050, doi:10.1088/1755-1315/930/1/012050. https://iopscience.iop.org/article/10.1088/1755-1315/930/1/012050/pdf

    Sperna Weiland, F.C., R.D. Visser, P. Greve, B. Bisselink, L. Brunner and A.H. Weerts, 2021. Estimating Regionalized Hydrological Impacts of Climate Change Over Europe by Performance-Based Weighting of CORDEX Projections, Frontiers of Water, https://doi.org/10.3389/frwa.2021.713537.

    Tangdamrongsub, N., Steele-Dunne, S.C., Gunter, B.C., Ditmar, P.G., Weerts, A.H., 2015. Data assimilation of GRACE terrestrial water storage estimates into a regional hydrological model of the Rhine River basin. Hydrol. Earth Syst. Sci. 19, 2079–2100. https://doi:10.5194/hess-19-2079-2015.

    van der Laan, E., P. Hazenberg, A.H. Weerts, 2024. Simulation of long-term storage dynamics of headwater reservoirs across the globe using public cloud computing infrastructure. Science of The Total Environment, 172678, https://doi.org/10.1016/j.scitotenv.2024.172678.

    van Osnabrugge, B., Weerts, A.H., Uijlenhoet, R., 2017. genRE: A method to extend gridded precipitation climatology data sets in near real-time for hydrological forecasting purposes. Water Resources Research, 53. https://doi.org/10.1002/2017WR021201.

    van Osnabrugge, B., Uijlenhoet, R., Weerts, A., 2019. Contribution of potential evaporation forecasts to 10-day streamflow forecast skill for the Rhine River, Hydrol. Earth Syst. Sci., 23, 1453–1467, https://doi.org/10.5194/hess-23-1453-2019.

    van der Vat, M., Boderie, P., Bons, K.A., Hegnauer, M., Hendriksen, G., van Oorschot, M., Ottow, B., Roelofsen, F., Sankhua, R.N., Sinha, S.K., Warren, A., Young, W., 2019. Participatory Modelling of Surface and Groundwater to Support Strategic Planning in the Ganga Basin in India. Water, 11, 2443. https://doi.org/10.3390/w11122443.

    Wannasin, C., Brauer, C. C., Uijlenhoet, R., van Verseveld, W. J., Weerts, A. H., 2021. Daily flow simulation in Thailand Part I: Testing a distributed hydrological model with seamless parameter maps based on global data. Journal of Hydrology: Regional Studies, 34, 1-19. https://doi.org/10.1016/j.ejrh.2021.100794.

    Wannasin, C., Brauer, C. C., Uijlenhoet, R., van Verseveld, W. J., Weerts, A. H., 2021. Daily flow simulation in Thailand Part II: Unraveling effects of reservoir operation. Journal of Hydrology: RegionalStudies, 34, 1-17. https://doi.org/10.1016/j.ejrh.2021.100792.

    Wang, X., Zhang, J., Babovic, V., 2016. Improving real-time forecasting of water quality indicators with combination of process-based models and data assimilation technique. Ecological Indicators 66, 428–439. https://doi:10.1016/j.ecolind.2016.02.016.

    PhD, MSc, BSc Theses & Internship reports

    Abdelnour, A., 2022. Bias Correction of Climate Simulations to Assess Climate Change Impacts on Low Flows in the Rhine River, MSc thesis, Delft Universitry of technology, https://repository.tudelft.nl/islandora/object/uuid:50489399-cbd2-467f-9b82-98e5f3e371e9.

    Ali, M.A., 2023. Machine learning for predicting spatially variable lateral hydraulic conductivity: a step towards efficient hydrological model calibration and global applicability, Intersnhip report, Deltares.

    Arnal, L., 2014. An intercomparison of flood forecasting models for the Meuse River basin, MSc Thesis, Vrije Universiteit, Amsterdam, https://hal.inrae.fr/hal-02600749.

    Alkemade, G., 2019. Routing and calibration of distributed hydrological models, MSc Thesis, Vrije Universiteit, Amsterdam, Faculty of Science, Hydrology.

    Azadeh Karami Fard, 2015. Modeling runoff of an Ethiopian catchment with WFLOW, MSc. Thesis, Vrije Universiteit, Amsterdam.

    Benschop, J., 2023. The application of hybrid lateral routing in hydrological simulations of the Rhine catchment, MSc Thesis, Hydrology and Environmental Hydraulics Group, Wageningen University.

    Beusen, B., 2021. The effect of rooting depth on discharge and evapotranspiration in (semi-)arid areas, MSc Thesis, Hydrology and Quantitative Water Management Group, Wageningen University.

    Beusen, B., 2021. Plastic transport and the effect of climate change in the Rhine, Internship report, Deltares.

    Bouaziz, L. J. E., 2021. Internal processes in hydrological models: A glance at the Meuse basin from space. Delft University of Technology, Delft, the Netherlands, Doctoral dissertation, https://doi.org/10.4233/uuid:09d84cc1-27e2-4327-a8c7-207a75952061.

    Hartgring, S., 2023. On Forecasting the Rur River: Using hindcasts and forecasts of the 2021 flood event to improve understanding of flood forecasting in the Rur catchment. Delft University of Technology, Delft, the Netherlands, MSc thesis, http://resolver.tudelft.nl/uuid:2909d997-a983-490a-a588-87119998543a.

    Jaime, D.E.V, 2021. Ensemble hydrological forecasts to derive extreme return periods: Case Study of the Overijsselse Vecht River using the wflow_sbm model, MSc thesis, Unesco IHE, Delft.

    López López, P., 2018. Application of Global Hydrological Datasets for River Basin Modelling Utrecht University, Utrecht, the Netherlands, pp. 1-214, Doctoral dissertation, http://dspace.library.uu.nl/handle/1874/364148.

    Maat, W.H., 2015. Simulating discharges and forecasting floods using a conceptual rainfall-runoff model for the Bolivian Mamoré basin, MSc Thesis, University of Twente, Enschede. https://essay.utwente.nl/67046/.

    van Osnabrugge, B., 2020. Interpolate, simulate, assimilate: operational aspects of improving hydrological forecasts in the Rhine basin. Wageningen University, Doctoral dissertation, https://doi.org/10.18174/513157.

    Rohrmueller, I., 2019. BENCHMARKING THE NEW WFLOW DISTRIBUTED HYDROLOGICAL MODEL, MSc Thesis, School of Engineering - Newcastle University.

    Rusli, S.R., 2024. Deepening the quantitative understanding of groundwater systems in data-scarce areas: application in the Bandung Groundwater Basin, Indonesia. Wageningen University, Doctoral dissertation, https://doi.org/10.18174/640983.

    Tretjakova, D., 2015. Investigating the effect of using fully-distributed model and data assimilation on the performance of hydrological forecasting in the Karasu catchment, Turkey, MSc thesis, Wageningen University.

    van der Gaast, R.H., 2024. Evaluating the transferability of data-driven pedo-transfer functions for the wflow_sbm parameter KsatHorFrac in central and Western Europe. Universiteit Twente, Enschede, The Netherlands, https://essay.utwente.nl/103634/1/vandergaast_MA_ET.pdf.

    Verbrugge, M., 2019. Reservoir Operation Optimization, a case study in the Chao Phraya Basin, BSc thesis, Hydrology and Quantitative Water Management Group, Wageningen University.

    Verbrugge, M., 2023. Bias-correcting meteorological forcing to improve seasonal discharge forecasting of the Rhine, Internship report, Deltares.

    Viguures, P., 2020. Modelling of flash floods in current and future climate with high resolution convection permitting regional climate models in the European Alps, MSc Thesis, Wageningen University.

    Visser, B., 2020. Impact of climate change on local water resources of European catchments, Intersnhip report, Deltares.

    Wannasin, C., 2023. Modelling and forecasting daily streamflow with reservoir operation in the upper Chao Phraya River basin, Thailand. Wageningen University, Doctoral dissertation, https://doi.org/10.18174/584572.

    Reports

    World Bank. 2021. Plastic Waste Discharges from Rivers and Coastlines in Indonesia. Marine Plastics Series;. World Bank, Washington, DC. © World Bank, https://openknowledge.worldbank.org/handle/10986/35607, License: CC BY 3.0 IGO.

    World Meteorological Organization (WMO), 2023. State of Global Water Resources report 2022, WMO-No. 1333, https://library.wmo.int/idurl/4/68473.

    World Meteorological Organization (WMO), 2024. State of Global Water Resources report 2023, WMO-No. 1362, https://library.wmo.int/idurl/4/69033.

    diff --git a/previews/PR490/intro/use_cases/index.html b/previews/PR490/intro/use_cases/index.html new file mode 100644 index 000000000..abd177974 --- /dev/null +++ b/previews/PR490/intro/use_cases/index.html @@ -0,0 +1,2 @@ + +Case studies · Wflow.jl

    Case studies

    Wflow models for the Meuse and Rhine

    Reliable hydrological models for the Rhine and the Meuse river basins are necessary for short-term forecasting of river flows and long-term predictions for strategic water management planning. In collaboration with Rijkswaterstaat, Deltares is developing a new line of models for the Rhine and the Meuse basins. The models will be used for forecasting and to estimate the impact of climate change on water resources and extreme streamflow. In the model development, we aim to improve hydrological predictions by including relevant processes in the model schematization. The modularity of the wflow framework is ideal for this as we can easily evaluate the combination of different vertical and lateral model components. For example, the local inertial routing for river and overland flow enables us to consider retention of water in the floodplains, which is likely to improve extreme streamflow predictions.

    fig_case_rws

    Operational flood forecasting in Australia

    In Australia, there was a need for high-resolution, fast and accurate rainfall-runoff models to provide boundary conditions for a fast and detailed flood inundation model (SFINCS). The domain of the flood model covers the entire North and East Coast of Australia. Although many gauging stations are available to provide real-time information, many rivers are not covered. For these locations, wflow_sbm models are used to provide this real-time information. Additionally, these models are used to provide projections for potential future scenarios. Using the HydroMT library, all wflow_sbm models were automatically built. The high level of flexibility in spatial and temporal resolution, combined with the physics-based nature of the concept, makes Wflow_sbm particularly suitable for ungauged basins. Furthermore, the model is detailed and computationally efficient enough for coupling with the fast flood inundation model SFINCS.

    fig_case_flifs

    The results of this proof of concept are very promising. Technically, we were able to quickly set up the wflow_sbm models, couple them to the flood inundation models (SFINCS), and run the models operationally under the Delft-FEWS platform. Model validation was conducted for two basins by comparing the results of Wflow_sbm against observations and the results of calibrated URBS models. This validation demonstrated that the uncalibrated Wflow_sbm model results were already quite satisfactory, especially given the complex nature of these basins, which include several small and large reservoirs. We could also show the potential for further calibration by adjusting the KsatHorFrac parameter.

    Reference: De Kleermaeker, S., Leijnse, T., Morales, Y., Druery, C., Maguire, S.,

    1. Developing a real-time data and modelling framework for operational flood inundation forecasting in Australia. In Hydrology & Water Resources Symposium 2022 (HWRS 2022): The Past, the Present, the Future. Engineers Australia. https://search.informit.org/doi/10.3316/informit.916755150845355

    fig_case_flifs

    Simulating plastic transport in Thailand

    For the Pollution Control Board of the Government of Thailand and the World Bank, we supported a material flow analysis of plastics in Thailand using wflow. Plastic pollution is a growing global issue. Plastic waste enters rivers and is transported to the ocean where it persists and threatens the health of the ocean, seas and coasts. The initial movement of plastic waste is in many cases triggered by runoff from (heavy) rainfall and transported by water flow towards small streams and rivers. Therefore there is strong relation to rainfall-runoff processes, which can be modeled using high-resolution rainfall-runoff models.

    In this study we applied the wflow_sbm model in combination with a fate-and-transport and water quality model (DelWaq) to simulate the movement of plastics through five large river basins and on three island and coastal zones (Krabi, Phuket, and Ko Samui; see screenshot of the model below) in Thailand. Together with our partners Panya Consultants and HII, we were able to identify hotspots of plastic pollution, estimate how much plastic waste would end up in the Gulf of Thailand and recommend priority areas for reducing plastic waste reaching the sea.

    fig_case_mfa

    The wflow_sbm models for the five large basins were calibrated. The presence of large dams and reservoirs complicated calibration, but with the input for the dam operation, the model performance for these basins could be largely improved. The figure below shows the calibrated model results for the Chao Phraya, just upstream of Bangkok. The input from the hydrological wflow_sbm model was used as input for the fate and transport model to assess the amount of plastic transported to the ocean.

    fig_case_mfa

    Link to World Bank report: https://www.worldbank.org/en/country/thailand/publication/plastic-waste-material-flow-analysis-for-thailand

    diff --git a/previews/PR490/model_docs/intro/index.html b/previews/PR490/model_docs/intro/index.html new file mode 100644 index 000000000..48a8c9bb8 --- /dev/null +++ b/previews/PR490/model_docs/intro/index.html @@ -0,0 +1,2 @@ + +About the model documentation · Wflow.jl

    About the model documentation

    As opposed to the user guide, which describes the steps needed to build and apply a model in the software, this section explains the different model concepts that are available within the modelling framework of wflow. Descriptions are given regarding the model concepts with links to the original scientific papers which explain the concepts in more detail. The model parameters which influence the processes are also shown, using inline code blocks. An overview of all model parameters is also provided for easy reference, including their short names, long descriptions and their units (see parameters vertical concepts and parameters lateral concepts).

    Division between vertical and lateral

    In the documentation we talk of vertical and lateral concepts. These are components in the model that describe the vertical movement of water in each model grid cell and the lateral movement of water across grid cells.

    diff --git a/previews/PR490/model_docs/lateral/gwf/index.html b/previews/PR490/model_docs/lateral/gwf/index.html new file mode 100644 index 000000000..e03b2dbef --- /dev/null +++ b/previews/PR490/model_docs/lateral/gwf/index.html @@ -0,0 +1,13 @@ + +Groundwater flow · Wflow.jl

    Groundwater flow

    Single layer groundwater flow requires the four following components, and each is described in more detail below:

    • aquifer
    • connectivity
    • constanthead
    • boundaries

    Aquifer types

    Groundwater flow can occur either in a confined or unconfined aquifer. Confined aquifers are overlain by a poorly permeable confining layer (e.g. clay). No air can get in to fill the pore space so that the aquifer always remains fully saturated. For a confined aquifer, water will always flow along the complete height $\SIb{H}{m}$ over the aquifer and transmissivity $\SIb{kH}{m^2 d^{-1}}$ is a constant ($\SIb{k}{m d^{-1}}$ is the horizontal hydraulic conductivity). Specific storage is the amount of water an aquifer releases per unit change in hydraulic head, per unit volume of aquifer, as the aquifer and the groundwater itself is compressed. Its value is much smaller than specific yield, between $10^{-5}$ (stiff) and $10^{-2}$ (weak).

    The upper boundary of an unconfined aquifer is the water table (the phreatic surface). Specific yield (or drainable porosity) represents the volumetric fraction the aquifer will yield when all water drains and the pore volume is filled by air instead. Specific yield will vary roughly between $0.05$ (clay) and $0.45$ (peat) (Johnson, 1967).

    Groundwater flow is solved forward in time and central in space. The vertically averaged governing equation for an inhomogeneous and isotropic aquifer in one dimension can be written as:

    \[ S \frac{\partial \phi}{\partial t} = \frac{\partial}{\partial x} \left(kH \frac{\phi}{\delta x}\right) + Q\]

    where $\SIb{S}{m m^{-1}}$ is storativity (or specific yield), $\SIb{\phi}{m}$ is hydraulic head, $t$ is time, $\SIb{k}{m t^{-1}}$ is horizontal hydraulic conductivity, $\SIb{H}{m}$ is the (saturated) aquifer height: groundwater level - aquifer bottom elevation and $\SIb{Q}{m t^{-1}}$ represents fluxes from boundary conditions (e.g. recharge or abstraction), see also Aquifer boundary conditions.

    The simplest finite difference formulation is forward in time, central in space, and can be written as:

    \[ S_i \frac{\phi_{i}^{t+1} - \phi_i^{t}}{\Delta t} = -C_{i-1} (\phi_{i-1} - \phi_i) - C_i (\phi_{i+1} - \phi_i) + Q_i\]

    where $i$ is the cell index, $t$ is time, $\Delta t$ is the step size, $C_{i-1}$ is the the intercell conductance between cell $i-1$ and $i$ and $C_i$ is the intercell conductance between cell $i$ and $i+1$. The connection data between cells is stored as part of the Connectivity struct, see also Connectivity for more information.

    Conductance $C$ is defined as:

    \[ C = \frac{kH w}{l}\]

    where $\SIb{w}{m}$ is the width of the cell to cell connection, and $\SIb{l}{m}$ is the length of the cell to cell connection. $k$ and $H$ may both vary in space; intercell conductance is therefore an average using the properties of two cells. For the calculation of the intercell conductance $C$ the harmonic mean is used (see also Goode and Appel, 1992), here between cell index $i$ and cell index $i+1$, in the $x$ direction:

    \[ C_i = w \frac{k_iH_i\cdot k_{i+1}H_{i+1}}{k_iH_i \cdot l_{i+1} + k_{i+1}H_{i+1} \cdot l_i}\]

    where $\SIb{H}{m}$ is the aquifer top - aquifer bottom, and $k$, $l_i$ is the length in cell $i$ ($0.5 \Delta x_i$), $l_{i+1}$ is the length in cell $i+1$ ($0.5 \Delta x_{i+1}$) and $w$ as previously defined. For an unconfined aquifer the intercell conductance is scaled by using the "upstream saturated fraction" as the MODFLOW documentation calls it. In this approach, the saturated thickness of a cell-to-cell is approximated using the cell with the highest head. This results in a consistent overestimation of the saturated thickness, but it avoids complexities related with cell drying and rewetting, such as having to define a "wetting threshold" or a "wetting factor". See also the documentation for MODFLOW-NWT (Niswonger et al., 2011) or MODFLOW6 (Langevin et al., 2017) for more background information. For more background on drying and rewetting, see for example McDonald et al. (1991).

    For the finite difference formulation, there is only one unknown, $\phi_i^{t+1}$. Reshuffling terms:

    \[\phi_i^{t+1} = \phi_i^t + (C_{i-1} (\phi_i - \phi_{i-1}) + C_i (\phi_{i+1} - \phi_i) + Q_i) \frac{Δt}{S_i}\]

    This can be generalized to two dimensions, for both regular and irregular cell connectivity. Finally, a stable time step size can be computed given the forward-in-time, central in space scheme, based on the following criterion from Chu and Willis (1984):

    \[\frac{\Delta t k H}{\Delta x \Delta y S} \le \frac{1}{4}\]

    where $\SIb{\Delta t}{d}$ is the stable time step size, $\SIb{\Delta x}{m}$ is the cell length in the $x$ direction and $\SIb{\Delta y}{m}$ is the cell length in the $y$ direction, $\SIb{k}{m^2 d^{-1}}$ is the horizontal hydraulic conductivity and $\SIb{H}{m}$ is the saturated thickness of the aquifer. For each cell $\frac{\Delta x \Delta y S}{k H}$ is calculated, the minimum of these values is determined, and multiplied by $\frac{1}{4}$, to get the stable time step size.

    For more details about the finite difference formulation and the stable time step size criterion we refer to the paper of Chu and Willis (1984).

    Boundary conditions can be classified into three categories:

    • specified head (Dirichlet)
    • specified flux (Neumann)
    • head-dependent flux (Robin)

    Neumann and Robin conditions are implemented by adding to or subtracting from a net (lumped) cell flux. Dirichlet conditions are special cased, since they cannot (easily) be implemented via the flux, but the head is set directly instead.

    Connectivity

    The connectivity between cells is defined as follows.

    Wflow.ConnectivityType
    Connectivity{T}

    Stores connection data between cells. Connections are stored in a compressed sparse column (CSC) adjacency matrix: only non-zero values are stored. Primarily, this consist of two vectors:

    • the row value vector holds the cell indices of neighbors
    • the column pointers marks the start and end index of the row value vector

    This matrix is square: n = m = ncell. nconnection is equal to nnz (the number of non-zero values).

    • ncell: the number of (active) cells in the simulation
    • nconnection: the number of connections between cells
    • length1: for every connection, the length in the first cell, size nconnection
    • length2: for every connection, the length in the second cell, size nconnection
    • width: width for every connection, (approx.) perpendicular to length1 and length2, size nconnection
    • colptr: CSC column pointer (size ncell + 1)
    • rowval: CSC row value (size nconnection)
    source

    Constant head

    Dirichlet boundary conditions can be specified through the field constanthead (type ConstantHead) of the GroundwaterFlow struct.

    @get_units struct ConstantHead{T}
    +    head::Vector{T} | "m"
    +    index::Vector{Int} | "-"
    +end

    For the model SBM + Groundwater flow this boundary condition is optional, and if used should be specified in the TOML file as follows (see also sbm_gwf_config.toml):

    [model]
    +constanthead = true

    Aquifer boundary conditions

    River

    The flux between river and aquifer is calculated using Darcy's law following the approach in MODFLOW:

    \[ \subtext{Q}{riv} = + \begin{align*} + \begin{cases} + C_i \min \left\{\subtext{h}{riv} - \subtext{B}{riv}, \subtext{h}{riv} - \phi\right\} &\text{ if }\quad \subtext{h}{riv} > \phi \\ + C_e (\subtext{h}{riv} - \phi) &\text{ if }\quad \subtext{h}{riv} \le \phi + \end{cases} + \end{align*}\]

    <!– It seems rather inconsistent to use units everywhere and then suddenly use dimensions instead here. –> where $\SIb{\subtext{Q}{riv}}{L^3 T^{-1}}$ is the exchange flux from river to aquifer, $\SIb{C_i}{L^2 T^{-1}}$ is the river bed infiltration conductance, $\SIb{C_e}{L^2 T^{-1}}$ is the river bed exfiltration conductance, $\SIb{\subtext{B}{riv}}{L}$ the bottom of the river bed, $\SIb{\subtext{h}{riv}}{L}$ is the river stage and $\SIb{\phi}{L}$ is the hydraulic head in the river cell.

    The Table in the Groundwater flow river boundary condition section of the Model parameters provides the parameters of the struct River. Parameters that can be set directly from the static input data (netCDF) are marked in this Table.

    The exchange flux (river to aquifer) $\subtext{Q}{riv}$ is an output variable (field flux of the River struct), and is used to update the total flux in a river cell. For the model SBM + Groundwater flow, the water level $\SIb{h}{m}$ of the river kinematic wave in combination with the river bottom is used to update the stage field of the River struct each time step.

    Drainage

    The flux from drains to the aquifer is calculated as follows:

    \[\subtext{Q}{drain} = \subtext{C}{drain} \min(0, \subtext{h}{drain} - \phi)\]

    where $\SIb{\subtext{Q}{drain}}{L^3 T^{-1}}$ is the exchange flux from drains to aquifer, $\SIb{\subtext{C}{drain}}{L^2 T^{-1}}$ is the drain conductance, $\SIb{\subtext{h}{drain}}{L}$ is the drain elevation and $\SIb{\phi}{L}$ is the hydraulic head in the cell with drainage.

    The table in the Groundwater flow drainage boundary condition section of the Model parameters provides the parameters of the struct Drainage. Parameters that can be set directly from the static input data (netCDF) are marked in this Table.

    The exchange flux (drains to aquifer) $\subtext{Q}{drain}$ is an output variable (field flux of struct Drainage), and is used to update the total flux in a cell with drains. For the model SBM + Groundwater flow this boundary condition is optional, and if used should be specified in the TOML file as follows (see also sbm_gwf_config.toml):

    [model]
    +drains = true

    Recharge

    The recharge flux $Q_{r}$ to the aquifer is calculated as follows:

    \[Q_{r} = R \, A\]

    with $\SIb{}{L T^{-1}}$ the recharge rate and $\SIb{A}{L^2}$ the area of the aquifer cell.

    The table in the Groundwater flow recharge boundary condition section of the Model parameters section provides the parameters of the struct Recharge. Parameters that can be set directly from the static input data (netCDF) are marked in this Table.

    The recharge flux $Q_r$ is an output variable (field flux of struct Recharge), and is used to update the total flux in a cell where recharge occurs. For the model SBM + Groundwater flow, the recharge rate from the vertical SBM concept recharge [mm] is used to update the rate field of the Recharge struct each time step. The rate field is multiplied by the area field of the aquifer.

    Head boundary

    This boundary is a fixed head with time (not affected by the model stresses over time)) outside of the model domain, and is generally used to avoid an unnecessary extension of the model domain to the location of the fixed boundary (for example a large lake). The flux from the boundary $\SIb{Q_{hb}}{L^3 T^{-1}}$ is calculated as follows:

    \[Q_{hb} = C_{hb} (\phi_{hb} - \phi)\]

    with $\SIb{C_{hb}}{L^2 T^{-1}}$ the conductance of the head boundary, $\SIb{\phi_{hb}}{L}$ the head of the head boundary and $\phi$ the head of the aquifer cell.

    The table in the Groundwater flow head boundary condition section of the Model parameters provides the parameters of the struct HeadBoundary.

    The head boundary flux $Q_{hb}$ is an output variable (field flux of struct HeadBoundary), and is used to update the total flux in a cell where this type of boundary occurs. The parameter Head $\phi_{hb}$ can be specified as a fixed or time dependent value.

    Note

    This boundary is not (yet) part of the model SBM + Groundwater flow.

    Well boundary

    A volumetric well rate $\SIb{}{L^3 T^{-1}}$ can be specified as a boundary condition.

    The Table in the well boundary condition section of the Model parameters provides the parameters of the struct Well.

    The volumetric well rate $\subtext{Q}{well}$ can be can be specified as a fixed or time dependent value. If a cell is dry, the actual well flux flux is set to zero (see also the last note on this page).

    Note

    This boundary is not (yet) part of the model SBM + Groundwater flow.

    Note

    For an unconfined aquifer the boundary fluxes are checked, in case of a dry aquifer cell a negative flux is not allowed.

    References

    • Chu, W. S., & Willis, R. (1984). An explicit finite difference model for unconfined aquifers. Groundwater, 22(6), 728-734.
    • Goode, D. J., & Appel, C. A. (1992). Finite-Difference Interblock Transmissivity for Unconfined Aquifers and for Aquifers having Smoothly Varying Transmissivity Water-resources investigations report, 92, 4124.
    • Johnson, A. I. (1967), Specific yield: compilation of specific yields for various materials, Water Supply Paper 1662-D, Washington, D.C.: U.S. Government Printing Office, p. 74, doi:10.3133/wsp1662D.
    • Langevin, C.D., Hughes, J.D., Banta, E.R., Niswonger, R.G., Panday, Sorab, and Provost, A.M., 2017, Documentation for the MODFLOW 6 Groundwater Flow Model: U.S. Geological Survey Techniques and Methods, book 6, chap. A55, 197 p., https://doi.org/10.3133/tm6A55.
    • McDonald, M.G., Harbaugh, A.W., Orr, B.R., and Ackerman, D.J., 1991, A method of converting no-flow cells to variable-head cells for the U.S. Geological Survey modular finite-difference groundwater flow model: U.S. Geological Survey Open-File Report 91-536, 99 p.
    • Niswonger, R.G., Panday, Sorab, and Ibaraki, Motomu, 2011, MODFLOW-NWT, A Newton formulation for MODFLOW-2005: U.S. Geological Survey Techniques and Methods 6-A37, 44 p.
    diff --git a/previews/PR490/model_docs/lateral/kinwave/index.html b/previews/PR490/model_docs/lateral/kinwave/index.html new file mode 100644 index 000000000..91f2d3de8 --- /dev/null +++ b/previews/PR490/model_docs/lateral/kinwave/index.html @@ -0,0 +1,27 @@ + +Kinematic wave · Wflow.jl

    Kinematic wave

    Surface routing

    The main flow routing scheme available in Wflow.jl is the kinematic wave approach for channel and overland flow, assuming that water flow is mostly controlled by topography. The kinematic wave equations are (Chow, 1988):

    \[ \dfrac{\partial Q}{\partial x} + \dfrac{\partial A}{\partial t} = q, \\~\\ + A = \alpha Q^{\beta}.\]

    These equations can then be combined as a function of streamflow only:

    \[ \dfrac{\partial Q}{\partial x} + \alpha \beta Q^{\beta - 1} \dfrac{\partial Q}{\partial t} = q.\]

    Here $\SIb{Q}{m^3 s^{-1}}$ is the surface runoff in the kinematic wave, $\SIb{x}{m}$ is the length of the runoff pathway, $\SIb{A}{m}$ is the cross-section area of the runoff pathway, $\SIb{t}{s}$ is the integration timestep and $\alpha$ and $\beta$ are unitless coefficients.

    These equations are solved with a nonlinear scheme using Newton's method and can also be iterated depending on the model space and time resolution. By default, the iterations are performed until a stable solution is reached ($\epsilon < 10^{-12}$). For larger models, the number of iterations can also be fixed for to a specific sub-timestep (in seconds) for both overland and channel flows to improve simulation time. To enable (fixed or not) iterations of the kinematic wave the following lines can be inserted in the TOML file of the model:

    [model]
    +# Enable iterations of the kinematic wave
    +kin_wave_iteration = true
    +# Fixed sub-timestep for iterations of channel flow (river cells)
    +kw_river_tstep = 900
    +# Fixed sub-timestep for iterations of overland flow (land cells)
    +kw_land_tstep = 3600

    The $\alpha$ parameter of the kinematic wave is fixed. To estimate the wetted perimeter for the calculation of the $\alpha$ parameter a bankfull river depth map (default value is $\SI{1.0}{m}$) for the river can be provided as follows:

    [input.lateral.river]
    +bankfull_depth = "wflow_riverdepth"

    The wetted perimeter of the river is based on half bankfull river depth. For the land part the wetted perimeter is based on the flow width.

    Simplified reservoir and lake models can be included as part of the river kinematic wave network.

    Inflow

    External water (supply/abstraction) inflow $\SIb{}{m^3 s^{-1}}$ can be added to the kinematic wave for surface water routing, as a cyclic parameter or as part of forcing (see also Input section).

    Abstractions

    Abstractions from the river through the variable abstraction $\SIb{}{m^3 s^{-1}}$ are possible when water demand and allocation is computed. The variable abstraction is set from the water demand and allocation module each time step. The abstraction is divided by the length of the runoff pathway and subtracted from the lateral inflow of the kinematic wave routing scheme for river flow.

    Subsurface flow routing

    In the SBM model the kinematic wave approach is used to route subsurface flow laterally. Different vertical hydraulic conductivity depth profiles are possible as part of the vertical SBM concept, and these profiles (after unit conversion) are also used to compute lateral subsurface flow. The following profiles (see SBM for a detailed description) are available:

    • exponential (default)
    • exponential_constant
    • layered
    • layered_exponential

    For the profiles exponential and exponential_constant, the saturated store $S$ is drained laterally by saturated downslope subsurface flow for a slope with width $\SIb{w}{m}$ according to:

    \[ Q = K_0\tan(\beta)w\begin{cases} + \frac{1}{f}\left(e^{-fz_i}-e^{-f\subtext{z}{exp}}\right) + + e^{-f\subtext{z}{exp}}(z_t-\subtext{z}{exp}) & \text{if $z_i < \subtext{z}{exp}$}\\ + \\ + e^{-f\subtext{z}{exp}}(z_t - z_i) & \text{if $z_i \ge \subtext{z}{exp}$}, + \end{cases}\]

    <!– potentially confusing reuse of symbol beta –> where $\beta$ is element slope angle, $\SIb{Q}{m^3 d^{-1}}$ is subsurface flow, $\SIb{K_0}{m d^{-1}}$ is the saturated hydraulic conductivity at the soil surface, $\SIb{z_i}{m}$ is the water table depth, $\SIb{z_{t}}{m}$ is the total soil depth, $\SIb{f}{m^{-1}}$ is a scaling parameter that controls the decrease of $K_0$ with depth and $\SIb{\subtext{z}{exp}}{m}$ is the depth from soil surface for which the exponential decline of $K_0$ is valid. For the exponential profile, $\subtext{z}{exp}$ is equal to $z_t$.

    Combining with the following continuity equation:

    \[ (\theta_s-\theta_r)w\frac{\partial h}{\partial t} = -\frac{\partial Q}{\partial x} + wr\]

    where $\SIb{h}{m}$ is the water table height, $\SIb{x}{m}$ is the distance downslope, and $\SIb{r}{m d^{-1}}$ is the net input rate to the saturated store. Substituting for $h (\frac{\partial Q}{\partial h})$, gives:

    \[ \frac{\partial Q}{\partial t} = -c\frac{\partial Q}{\partial x} + cwr\]

    where celerity $c$ is calculated as follows:

    \[ c = \frac{K_0 \tan(\beta)}{\theta_s-\theta_r}\begin{cases} + e^{-fz_i} + + e^{-f\subtext{z}{exp}} & \text{if $z_i < \subtext{z}{exp}$}\\ + \\ + e^{-f\subtext{z}{exp}} & \text{if $z_i \ge \subtext{z}{exp}$}. + \end{cases}\]

    For the layered and layered_exponential profiles the equivalent horizontal hydraulic conductivity $\SIb{K_h}{m d^{-1}}$ is calculated for water table height $\SIb{h = z_t-z_i}{m}$ and lateral subsurface flow is calculated as follows:

    \[ Q = K_h h \tan(\beta) w,\]

    and celerity $c$ is given by:

    \[ c = \frac{K_h \tan(\beta)}{\theta_s-\theta_r}.\]

    The kinematic wave equation for lateral subsurface flow is solved iteratively using Newton's method.

    Note

    For the lateral subsurface flow kinematic wave the model timestep is not adjusted. For certain model timestep and model grid size combinations this may result in loss of accuracy.

    Multi-Threading

    The kinematic wave calculations for surface - and subsurface flow routing can be executed in parallel using multiple threads. In the model section of the TOML file, a minimum stream order can be provided to define subbasins for the river (default is 6) and land domain (default is 5). Subbasins are created at all confluences where each branch has a minimal stream order. Based on the subbasins a directed acyclic graph is created that controls the order of execution and which subbasins can run in parallel.

    [model]
    +min_streamorder_river = 5 # minimum stream order to delineate subbasins for river domain, default is 6
    +min_streamorder_land = 4  # minimum stream order to delineate subbasins for land domain, default is 5

    Subcatchment flow

    Normally the the kinematic wave is continuous throughout the model. By using the pits entry in the model and input sections of the TOML file all flow is at the subcatchment only (upstream of the pit locations, defined by the netCDF variable wflow_pits in the example below) and no flow is transferred from one subcatchment to another. This can be convenient when connecting the result of the model to a water allocation model such as Ribasim.

    [input]
    +# these are not directly part of the model
    +pits = "wflow_pits"
    +
    +[model]
    +pits = true

    Limitations

    The kinematic wave approach for channel, overland and lateral subsurface flow, assumes that the topography controls water flow mostly. This assumption holds for steep terrain, but in less steep terrain the hydraulic gradient is likely not equal to the surface slope (subsurface flow), or pressure differences and inertial momentum cannot be neglected (channel and overland flow). In addition, while the kinematic wave equations are solved with a nonlinear scheme using Newton's method (Chow, 1988), other model equations are solved through a simple explicit scheme. In summary the following limitations apply:

    • Channel flow, and to a lesser degree overland flow, may be unrealistic in terrain that is not steep, and where pressure forces and inertial momentum are important.

    • The lateral movement of subsurface flow may be very wrong in terrain that is not steep.

    External inflows

    External inflows, for example water supply or abstractions, can be added to the kinematic wave via the inflow variable. For this, the user can supply a 2D map of the inflow, as a cyclic parameter or as part of forcing (see also Input section). These inflows are added or abstracted from the upstream inflow qin before running the kinematic wave to solve the impact on resulting q. In case of a negative inflow (abstractions), a minimum of zero is applied to the upstream flow qin.

    References

    • Chow, V., Maidment, D. and Mays, L., 1988, Applied Hydrology. McGraw-Hill Book Company, New York.
    diff --git a/previews/PR490/model_docs/lateral/local-inertial/index.html b/previews/PR490/model_docs/lateral/local-inertial/index.html new file mode 100644 index 000000000..1d93a9eff --- /dev/null +++ b/previews/PR490/model_docs/lateral/local-inertial/index.html @@ -0,0 +1,16 @@ + +Local inertial · Wflow.jl

    Local inertial

    River and floodplain routing

    The local inertial approximation of shallow water flow neglects only the convective acceleration term in the Saint-Venant momentum conservation equation. The numerical solution of the local inertial approximation on a staggered grid is as follows (Bates et al., 2010):

    \[Q_{t+\Delta t} = \frac{Q_t - g A_t \Delta t S_t}{(1+g\Delta t n^2 |Q_t| / (R_t^{4/3} A_t))}\]

    where $\SIb{Q_{t+\Delta t}}{m^3 s^{-1}}$ is the river flow at time step $t+\Delta t$, $\SIb{g}{m s^{-2}}$ is acceleration due to gravity, $\SIb{A_t}{m^2}$ is the cross sectional flow area at the previous time step, $\SIb{R_t}{m}$ is the hydraulic radius at the previous time step, $\SIb{Q_t}{m^3 s^{-1}}$ is the river flow at the previous time step, $S_t$ is the water surface slope at the previous time step and $\SIb{n}{m^{-\frac{1}{3}} s}$ is the Manning's roughness coefficient.

    The momentum equation is applied to each link between two river grid cells, while the continuity equation over $\Delta t$ is applied to each river cell:

    \[h^{t+\Delta t} = h^t + \Delta t \frac{\subtext{Q^{t+\Delta t}}{src} - \subtext{Q^{t+\Delta t}}{dst}}{A}\]

    where $\SIb{h^{t+\Delta t}}{m}$ is the water depthat time step $t+\Delta t$, $\SIb{h^t}{m}$ is the water depth at the previous time step, $\SIb{A}{m^2}$ is the river area and $\SIb{\subtext{Q}{src}}{m^3 s^{-1}}$ and $\SIb{\subtext{Q}{dst}}{m^3 s^{-1}}$ represent river flow at the upstream and downstream link of the river cell, respectively.

    The model time step $\Delta t$ for the local inertial model is estimated based on the Courant-Friedrichs-Lewy condition (Bates et al., 2010):

    \[\Delta t = \alpha \min_i\left(\frac{\Delta x_i}{\sqrt{gh_i}}\right)\]

    where $\sqrt{gh_i}$ is the wave celerity for river cell $i$ , $\SIb{\Delta x_i}{m}$ is the river length for river cell $i$ and $\alpha$ is a coefficient (typically between $0.2$ and $0.7$) to enhance the stability of the simulation.

    In the TOML file the following properties related to the local inertial model can be provided for the sbm and sbm_gwf model types:

    [model]
    +river_routing = "local-inertial"  # default is "kinematic-wave"
    +inertial_flow_alpha = 0.5         # alpha coefficient for model stability (default = 0.7)
    +froude_limit = true               # default is true, limit flow to subcritical-critical according to Froude number
    +h_thresh = 0.1                    # water depth [m] threshold for calculating flow between cells (default = 1e-03)
    +floodplain_1d = true              # include 1D floodplain schematization (default = false)

    Two optional constant boundary conditions riverlength_bc and riverdepth_bc can be provided at a river outlet node (or multiple river outlet nodes) through the model parameter netCDF file, as follows:

    [input.lateral.river]
    +riverlength_bc = "riverlength_bc"   # optional river length [m], default = 1e04
    +riverdepth_bc = "riverdepth_bc"     # optional river depth [m], default = 0.0

    These boundary conditions are copied to a ghost node (downstream of the river outlet node) in the code.

    The optional 1D floodplain schematization is based on provided flood volumes as a function of flood depth (per flood depth interval) for each river cell. Wflow calculates from these flood volumes a rectangular floodplain profile for each flood depth interval. Routing is done separately for the river channel and floodplain.

    The momentum equation is most stable for low slope environments, and to keep the simulation stable for (partly) steep environments the froude_limit option is set to true by default. This setting limits flow conditions to subcritical-critical conditions based on the Froude number ($\le 1$), similar to Coulthard et al. (2013) in the CAESAR-LISFLOOD model and Adams et al. (2017) in the Landlab v1.0 OverlandFlow component. The froude number $\mathrm{Fr}$ on a link is calculated as follows:

    \[ \mathrm{Fr} = \frac{u}{\sqrt{gh_f}}\]

    where $\sqrt{gh_f}$ is the wave celerity on a link and $u$ is the water velocity on a link. If the water velocity from the local inertial model is causing the Froude number to be greater than $1.0$ , the water velocity (and flow) is reduced in order to maintain a Froude number of $1.0$.

    The downstream boundary condition basically simulates a zero water depth boundary condition at a set distance, as follows. For the downstream boundary condition (ghost point) the river width, river bed elevation and Manning's roughness coefficient are copied from the upstream river cell. The river length $\SIb{}{m}$ of the boundary cell can be set through the TOML file with riverlength_bc, and has a default value of $\SI{10}{km}$. The water depth at the boundary cell is fixed at $\SI{0.0}{m}$.

    Simplified reservoir and lake models can be included as part of the local inertial model for river flow (1D) and river and overland flow combined (see next section). Reservoir and lake models are included as a boundary point with zero water depth for both river and overland flow. For river flow the reservoir or lake model replaces the local inertial model at the reservoir or lake location, and $Q$ is set by the outflow from the reservoir or lake. Overland flow at a reservoir or lake location is not allowed to or from the downstream river grid cell.

    Overland flow (2D)

    For the simulation of 2D overland flow on a staggered grid the numerical scheme proposed by de Almeida et al. (2012) is adopted. The explicit solution for the estimation of water discharge between two cells in the x-direction is of the following form (following the notation of Almeida et al. (2012)):

    \[Q_{i-1/2}^{n+1} = \frac{\left[ \theta Q_{i-1/2}^{n} +\frac{(1-\theta)}{2}(Q_{(i-3/2)}^{n} + \\ + Q_{(i+1/2)}^{n})\right]- g h_f \frac{\Delta t}{\Delta x} (\eta^n_i - \eta^n_{i-1}) \Delta y}{1+g\Delta t \\ + n^2 |Q_{i-1/2}^{n}|/(h_f^{7/3} \Delta y)}\]

    <!– n is used both as a time index and as the Manning roughness coefficient! –> where subscripts $i$ and $n$ refer to space and time indices, respectively. Subscript $i-\frac{1}{2}$ is to the link between node $i$ and $i-1$, subscript $i+\frac{1}{2}$ is the link between node $i$ and node $i+1$, and subscript $i-\frac{3}{2}$ is the link between node $i-1$ and node $i-2$. $\SIb{Q}{m^3 s^{-1}}$ is the water discharge, $\SIb{\eta}{m}$ is the water surface elevation, $\SIb{h_f}{m}$ is the water depth between cells, $\SIb{n}{m^{-\frac{1}{3}} s}$ is the Manning's roughness coefficient, $\SIb{g}{m s^{-2}}$ is acceleration due to gravity, $\SIb{\Delta t}{s}$ is the adaptive model time step, $\SIb{\Delta x}{m}$ is the distance between two cells and $\SIb{\Delta y}{m}$ is the flow width. Below the staggered grid and variables of the numerical solution in the x-direction, based on Almeida et al. (2012):

    numerical_scheme_almeida

    The overland flow local inertial approach is used in combination with the local inertial river routing. This is a similar to the modelling approach of Neal et al. (2012), where the hydraulic model LISFLOOD-FP was extended with a subgrid channel model. For the subgrid channel, Neal et al. (2012) make use of a D4 (four direction) scheme, while here a D8 (eight direction) scheme is used, in combination with the D4 scheme for 2D overland flow.

    In the TOML file the following properties related to the local inertial model with 1D river routing and 2D overland flow can be provided for the sbm model type:

    [model]
    +land_routing = "local-inertial"  # default is kinematic-wave
    +river_routing = "local-inertial" # default is kinematic-wave
    +inertial_flow_alpha = 0.5        # alpha coefficient for model stability (default = 0.7)
    +froude_limit = true              # default is true, limit flow to subcritical-critical according to Froude number
    +h_thresh = 0.1                   # water depth [m] threshold for calculating flow between cells (default = 1e-03)

    The properties inertial_flow_alpha, froude_limit and h_thresh apply to 1D river routing as well as 2D overland flow. The properties inertial_flow_alpha and froude_limit, and the adaptive model time step $\Delta t$ are explained in more detail in the River and floodplain routing section of the local inertial model.

    Inflow

    External water (supply/abstraction) inflow $\SIb{}{m^3 s^{-1}}$ can be added to the local inertial model for river flow (1D) and river and overland flow combined (1D-2D), as a cyclic parameter or as part of forcing (see also Input section).

    Abstractions

    Abstractions from the river through the variable abstraction $\SIb{}{m^3 s^{-1}}$ are possible when water demand and allocation is computed. The variable abstraction is set from the water demand and allocation module each time step. Abstractions are subtracted as part of the continuity equation of the local inertial model.

    Multi-Threading

    The local inertial model for river flow (1D) and river and overland flow combined (1D-2D) can be executed in parallel using multiple threads.

    References

    • Adams, J. M., Gasparini, N. M., Hobley, D. E. J., Tucker, G. E., Hutton, E. W. H., Nudurupati, S. S., and Istanbulluoglu, E., 2017, The Landlab v1.0 OverlandFlow component: a Python tool for computing shallow-water flow across watersheds, Geosci. Model Dev., 10, 1645–1663, https://doi.org/10.5194/gmd-10-1645-2017.
    • de Almeida, G. A. M., P. Bates, J. E. Freer, and M. Souvignet, 2012, Improving the stability of a simple formulation of the shallow water equations for 2-D flood modeling, Water Resour. Res., 48, W05528, https://doi.org/10.1029/2011WR011570.
    • Bates, P. D., M. S. Horritt, and T. J. Fewtrell, 2010, A simple inertial formulation of the shallow water equations for efficient two-dimensional flood inundation modelling, J. Hydrol., 387, 33–45, https://doi.org/10.1016/j.jhydrol.2010.03.027.
    • Coulthard, T. J., Neal, J. C., Bates, P. D., Ramirez, J., de Almeida, G. A. M., and Hancock, G. R., 2013, Integrating the LISFLOOD-FP 2- D hydrodynamic model with the CAESAR model: implications for modelling landscape evolution, Earth Surf. Proc. Land., 38, 1897–1906, https://doi.org/10.1002/esp.3478.
    • Neal, J., G. Schumann, and P. Bates (2012), A subgrid channel model for simulating river hydraulics and floodplaininundation over large and data sparse areas, Water Resour.Res., 48, W11506, https://doi.org/10.1029/2012WR012514.
    diff --git a/previews/PR490/model_docs/lateral/sediment_flux/index.html b/previews/PR490/model_docs/lateral/sediment_flux/index.html new file mode 100644 index 000000000..db28486f0 --- /dev/null +++ b/previews/PR490/model_docs/lateral/sediment_flux/index.html @@ -0,0 +1,42 @@ + +Sediment flux · Wflow.jl

    Sediment flux

    Both the inland and river sediment model take into account sediment flux or transport of sediment in water, either in overland flow or in the stream flow. These two transport are distinguished in two different structures.

    Inland Sediment Model

    Sediment Flux in overland flow

    Once the amount of soil detached by both rainfall and overland flow has been estimated, it has then to be routed and delivered to the river network. Inland routing in sediment models is usually done by comparing the amount of detached sediment with the transport capacity of the flow, which is the maximum amount of sediment that the flow can carry downslope. There are several existing formulas available in the literature. For a wide range of slopes and for overland flow, the Govers equation (1990) seems the most appropriate choice (Hessel et al, 2007). However, as the wflow_sediment model was developed to be linked to water quality issues, the Yalin transport equation was chosen as it can handle particle differentiation (Govers equation can still be used if wflow_sediment is used to only model inland processes with no particle differentiation). For land cells, wflow_sediment assumes that erosion can mobilize 5 classes of sediment:

    • Clay (mean diameter of $\SI{2}{\mu m}$)
    • Silt (mean diameter of $\SI{10}{\mu m}$)
    • Sand (mean diameter of $\SI{200}{\mu m}$)
    • Small aggregates (mean diameter of $\SI{30}{\mu m}$)
    • Large aggregates (mean diameter of $\SI{50}{\mu m}$).

    \[ \mathrm{PSA} = \mathrm{SAN} (1-\mathrm{CLA})^{2.4} \\ + \mathrm{PSI} = 0.13\mathrm{SIL}\\ + \mathrm{PCL} = 0.20\mathrm{CLA} \\ + + \mathrm{SAG} = + \begin{align*} + \begin{cases} + 2.0\mathrm{CLA} &\text{ if }\quad \mathrm{CLA} < 0.25 \\ + 0.28(\mathrm{CLA}-0.25)+0.5 &\text{ if }\quad 0.25 \leq \mathrm{CLA} \leq 0.5 \\ + 0.57 &\text{ if }\quad \mathrm{CLA} > 0.5 + \end{cases} + \end{align*} \\ + + \mathrm{LAG} = 1 - \mathrm{PSA} - \mathrm{PSI} - \mathrm{PCL} - \mathrm{SAG}\]

    where $\mathrm{CLA}$, $\mathrm{SIL}$ and $\mathrm{SAN}$ are the primary clay, silt, sand fractions of the topsoil and $\mathrm{PCL}$, $\mathrm{PSI}$, $\mathrm{PSA}$, $\mathrm{SAG}$ and $\mathrm{LAG}$ are the clay, silt, sand, small and large aggregates fractions of the detached sediment respectively. The transport capacity of the flow using Yalin's equation with particle differentiation, developed by Foster (1982), is:

    \[ \mathbf{TC}_i = (P_e)_i (S_g)_i \, \rho_w \, g \, d_i V_*\]

    where $\mathbf{TC}_i$ is the transport capacity of the flow for the particle class $i$, $(P_e)_i$ is the effective number of particles of class $i$, $\SIb{(S_g)_i}{kg m^{-3}}$ is the specific gravity for the particle class $i$, $\SIb{\rho_w}{kg m^{-3}}$ is the mass density of the fluid, $\SIb{g}{m s^{-2}}$ is the acceleration due to gravity, $\SIb{d_i}{m}$ is the diameter of the particle of class $i$ and $V_* = \SIb{(g R S)^{0.5}}{m s^{-1}}$ is the shear velocity of the flow with $S$ the slope gradient and $\SIb{R}{m}$ the hydraulic radius of the flow. The detached sediment are then routed down slope until the river network using the accucapacityflux, accupacitystate functions depending on the transport capacity from Yalin.

    The choice of transport capacity method for the overland flow is set up in the model section of the TOML:

    [model]
    +landtransportmethod = "yalinpart" # Overland flow transport capacity method: ["yalinpart", "govers", "yalin"]

    Note that the "govers" and "yalin" equations can only assess total transport capacity of the flow and can therefore not be used in combination with the river part of the sediment model.

    River Sediment Model

    Sediment dynamics in rivers can be described by the same three processes on land: erosion, deposition and transport. The difference is that channel flow is much higher, deeper and permanent compared to overland flow. In channels, erosion is the direct removal of sediments from the river bed or bank (lateral erosion). Sediments are transported in the river either by rolling, sliding and silting (bed load transport) or via turbulent flow in the higher water column (suspended load transport). The type of transport is determined by the river bed shear stress. As sediment particles have a higher density than water, they can also be deposited on the river bed according to their settling velocity compared to the flow velocity. In addition to regular deposition in the river, lakes, reservoirs and floodplains represents additional major sediment settling pools.

    Complete models of sediment dynamics based on hydrology and not on hydraulics or hydrodynamics are much rarer than for soil loss and inland dynamics. The simpler models such as the SWAT default sediment river model uses again the transport capacity of the flow to determine if there is erosion or deposition (Neitsch et al., 2011). A more physics-based approach (Partheniades, 1965) to determine river erosion is used by Liu et al. (2018) and in the new SWAT's approach developed by Narasimhan et al. (2017). For wflow_sediment, the new physics-based model of SWAT was chosen for transport and erosion as it enables the use of parameter estimation for erosion of bed and bank of the channel and separates the suspended from the bed loads.

    Overview of the different processes for a river cell in wflow_sediment.

    sediment_instream

    Running the river model is an option of the wflow_sediment model and is enabled using the TOML file. By default it is false:

    [model]
    +runrivermodel = true

    Sediment inputs in a river cell

    The first part of the river model assesses how much detached sediment are in the river cell at the beginning of the timestep $t$. Sources of detached sediment are sediments coming from land erosion, estimated with the soil loss part of wflow_sediment model, the sediment coming from upstream river cells and the detached sediment that were left in the cell at the end of the previous timestep $(t-1)$:

    \[ (\subtext{\mathrm{sed}}{in})_t = (\subtext{\mathrm{sed}}{land})_t + \mathrm{upstream}\left[(\subtext{\text{sed}}{out})_{t-1}\right] + (\subtext{\text{sed}}{riv})_{t-1}\]

    River transport and erosion

    Once the amount of sediment inputs at the beginning of the timestep is known, the model then estimates transport, and river erosion if there is a deficit of sediments. Transport in the river system is estimated via a transport capacity formula. There are several transport capacity formulas available in wflow_sediment, some requiring calibration and some not. Choosing a transport capacity equation depends on the river characteristics (some equation are more suited for narrow or wider rivers), and on the reliability of the required river parameters (such as slope, width or mean particle diameter of the river channel). Several river transport capacity are available and the choice is set up in the model section of the TOML:

    [model]
    +rivtransportmethod = "bagnold" # River flow transport capacity method: ["bagnold", "engelund", "yang", "kodatie", "molinas"]

    Simplified Bagnold

    Originally more valid for intermediate to large rivers, this simplified version of the Bagnold equation relates sediment transport to flow velocity with two simple calibration parameters (Neitsch et al, 2011):

    \[C_{\max} = \subtext{c}{sp} \left( \dfrac{\mathrm{prf} Q}{h W} \right)^{\subtext{\mathrm{sp}}{exp}}\]

    where $\SIb{C_{\max}}{kg L^{-1}}$ (or $\SIb{}{ton m^{-1}}$) is the sediment concentration, $\SIb{Q}{m^3 s^{-1}}$ is the surface runoff in the river cell, $\SIb{h}{m}$ is the river water level, $\SIb{W}{m}$ is the river width and $\subtext{c}{sp}$, $\mathrm{prf}$ and $\subtext{\mathrm{sp}}{exp}$ are calibration parameters. The $\mathrm{prf}$ coefficient is usually used to deduce the peak velocity of the flow, but for simplification in wflow_sediment, the equation was simplified to only get two parameters to calibrate: $\subtext{\mathrm{sp}}{exp}$ and $\subtext{c}{Bagnold} = \subtext{c}{sp} \, \mathrm{prf}^{\subtext{\mathrm{sp}}{exp}}$. The coefficient $\subtext{\mathrm{sp}}{exp}$ usually varies between $1$ and $2$ while $\mathrm{prf}$ and $\subtext{c}{sp}$ have a wider range of variation. The table below summarizes ranges and values of the three Bagnold coefficients used by other studies:

    Table: Range of the simplified Bagnold coefficients (and calibrated value)

    StudyRiver$\mathrm{prf}$ range$\subtext{c}{sp}$ range$\subtext{\mathrm{sp}}{exp}$ range
    Vigiak 2015Danube0.5-2 (/)0.0001-0.01 (0.003-0.006)1-2 (1.4)
    Vigiak 2017Danube/0.0001-0.01 (0.0015)1-2 (1.4)
    Abbaspour 2007Thur (CH)0.2-0.25 (/)0.001-0.002 (/)0.35-1.47 (/)
    Oeurng 2011Save (FR)0-2 (0.58)0.0001-0.01 (0.01)1-2 (2)

    Engelund and Hansen This transport capacity is not present in SWAT but used in many models such as Delft3D-WAQ, Engelund and Hansen calculates the total sediment load as (Engelund and Hansen, 1967):

    \[ C_w = 0.05 \left( \dfrac{\rho_{s}}{\rho_{s} - \rho} \right) \left( \dfrac{u S}{\sqrt{\left( \dfrac{\rho_{s}}{\rho_{s} - \rho} \right) g D_{50}}} \right) \theta^{1/2}\]

    where $C_w$ is the sediment concentration by weight, $\SIb{\rho}{g m^{-3}}$ and $\SIb{\rho_{s}}{g m^{-3}}$ are the fluid and sediment density (here respectively equal to $\SI{1000}{g m^{-3}}$ and $\SI{2650}{g m^{-3}}$), $\SIb{u}{m s^{-1}}$ is the water mean velocity, $S$ is the river slope, $g$ is the acceleration due to gravity, $\SIb{D_{50}}{m}$ is the river mean diameter and $\theta$ is the Shields parameter.

    Kodatie Kodatie (1999) developed the power relationships from Posada (1995) using field data and linear optimization so that they would be applicable for a wider range of riverbed sediment size. The resulting equation, for a rectangular channel, is (Neitsch et al, 2011):

    \[ C_{\max} = \left( \dfrac{a u^{b} h^{c} S^{d}}{\subtext{V}{in}} \right) W\]

    where $\SIb{\subtext{V}{in}}{m^3}$ in the volume of water entering the river cell during the timestep and $a$, $b$, $c$ and $d$ are coefficients depending on the riverbed sediment size. Values of these coefficients are summarized in the table below.

    Table: Range of the simplified Bagnold coefficients (and calibrated value)

    River sediment diameterabcd
    $D_{50} \leq \SI{0.05}{mm}$281.42.6220.1820
    $\SI{0.05}{mm} < D_{50} \leq \SI{0.25}{mm}$2 829.63.6460.4060.412
    $\SI{0.25}{mm} < D_{50} \leq \SI{2.0}{mm}$2 123.43.3000.4680.613
    $D_{50} > \SI{2.0}{mm}$431 884.81.0001.0002.000

    Yang Yang (1996) developed a set of two equations giving transport of sediments for sand-bed or gravel-bed rivers. The sand equation ($D_{50} < \SI{2.0}{mm}$) is:

    \[ \log\left(C_{ppm}\right) = 5.435 - 0.286\log\left(\frac{\omega_{s,50}D_{50}}{\nu}\right)-0.457\log\left(\frac{u_*}{\omega_{s,50}}\right) \\ + +\left(1.799-0.409\log\left(\frac{\omega_{s,50}D_{50}}{\nu}\right)-0.314\log\left(\frac{u_*}{\omega_{s,50}}\right)\right)\log\left(\frac{uS}{\omega_{s,50}}-\frac{u_{cr}S}{\omega_{s,50}}\right)\]

    And the gravel equation ($\SI{2.0}{mm} \leq D_{50} < \SI{10.0}{mm}$) is:

    \[ \log\left(C_{ppm}\right) = 6.681 - 0.633\log\left(\frac{\omega_{s,50}D_{50}}{\nu}\right)-4.816\log\left(\frac{u_*}{\omega_{s,50}}\right) \\ + +\left(2.784-0.305\log\left(\frac{\omega_{s,50}D_{50}}{\nu}\right)-0.282\log\left(\frac{u_*}{\omega_{s,50}}\right)\right)\log\left(\frac{uS}{\omega_{s,50}}-\frac{u_{cr}S}{\omega_{s,50}}\right)\]

    where $C_{ppm}$ is sediment concentration in parts per million by weight, $\SIb{\omega_{s,50}}{m s^{-1}}$ is the settling velocity of a particle with the median riverbed diameter estimated with Stokes, $\SIb{\nu}{m^2 s^{-1}}$ is the kinematic viscosity of the fluid, $\SIb{u_*}{m s^{-1}}$ is the shear velocity where $u_* = \sqrt{gR_{H}S}$ with $R_{H}$ the hydraulic radius of the river and $\SIb{u_{cr}}{m s^{-1}}$ is the critical velocity (equation can be found in Hessel, 2007).

    Molinas and Wu The Molinas and Wu (2001) transport equation was developed for large sand-bed rivers based on the universal stream power $\psi$. The corresponding equation is (Neitsch et al, 2011):

    \[ C_{w} = \dfrac{1430 (0.86+\sqrt{\psi}) \psi^{1.5}}{0.016+\psi} 10^{-6}\]

    where $\psi$ is the universal stream power given by:

    \[ \psi = \dfrac{\psi^{3}}{\left(\dfrac{\rho_{s}}{\rho}-1\right) g h \omega_{s,50} \left[ \log_{10}\left(\dfrac{h}{D_{50}}\right)\right]^{2}}\]

    Once the maximum concentration $C_{\max}$ is established with one of the above transport formula, the model then determines if there is erosion of the river bed and bank. In order to do that, the difference $sed_{ex}$ between the maximum amount of sediment estimated with transport ($\mathrm{sed}_{\max} = C_{\max} \subtext{V}{in}$) and the sediment inputs to the river cell ($\subtext{\mathrm{sed}}{in}$ calculated above) is calculated. If too much sediment is coming in and $\subtext{\mathrm{sed}}{ex}$ is negative, then there is no river bed and bank erosion. And if the river has not reach its maximum transport capacity, then erosion of the river happens.

    First, the sediments stored in the cell from deposition in previous timesteps $\subtext{\mathrm{sed}}{stor}$ are eroded from clay to gravel. If this amount is not enough to cover $\subtext{\mathrm{sed}}{ex}$, then erosion of the local river bed and bank material starts.

    Instead of just setting river erosion amount to just cover the remaining difference $\subtext{\mathrm{sed}}{exeff}$ between $\subtext{\mathrm{sed}}{ex}$ and $\subtext{\mathrm{sed}}{stor}$, actual erosion potential is adjusted using river characteristics and is separated between the bed and bank of the river using the physics-based approach of Knight (1984).

    The bed and bank of the river are supposed to only be able to erode a maximum amount of their material $E_{R,\mathrm{bed}}$ for the bed and $E_{R,\mathrm{bank}}$ for the river bank. For a rectangular channel, assuming it is meandering and thus only one bank is prone to erosion, they are calculated from the equations (Neitsch et al, 2011):

    \[ E_{R,\mathrm{bed}} = k_{d,\mathrm{bed}} \left( \tau_{e,\mathrm{bed}} - \tau_{cr,\mathrm{bed}} \right) 10^{-6} L W \rho_{b, \mathrm{bed}} \Delta t \\~\\ + E_{R,\mathrm{bank}} = k_{d,\mathrm{bank}} \left( \tau_{e,\mathrm{bank}} - \tau_{cr,\mathrm{bank}} \right) 10^{-6} L h \rho_{b, \mathrm{bank}} \Delta t\]

    where $\SIb{E_R}{ton}$ is the potential bed/bank erosion rates, $\SIb{k_d}{cm^3 N^{-1}, s^{-1}}$ is the erodibility of the bed/bank material, $\SIb{\tau_e}{N m^{-2}}$ is the effective shear stress from the flow on the bed/bank, $\SIb{\tau_{cr}}{N m^{-2}}$ is the critical shear stress for erosion to happen, $\SIb{L}{m}$, $\SIb{W}{m}$ and $\SIb{h}{m}$ are the channel length, width and water height, $\SIb{\rho_{b}}{g cm^{-3}}$ is the bulk density of the bed/bank of the river and $\SIb{\Delta t}{s}$ is the model timestep.

    In wflow_sediment, the erodibility of the bed/bank are approximated using the formula from Hanson and Simon (2001):

    \[ k_d=0.2 \tau_{cr}^{-0.5}\]

    Normally erodibilities are evaluated using jet test in the field and there are several reviews and some adjustments possible to this equation (Simon et al, 2011). However, to avoid too heavy calibration and for the scale considered, this equation is supposed to be efficient enough. The critical shear stress $\tau_{cr}$ is evaluated differently for the bed and bank. For the bed, the most common formula from Shields initiation of movement is used. For the bank, a more recent approach from Julian and Torres (2006) is used :

    \[ \tau_{cr,\mathrm{bank}} = (0.1+0.1779 SC+0.0028 SC^{2}-2.34 10^{-5} SC^{3}) C_{ch}\]

    where $SC$ is the percent clay and silt content of the river bank and $C_{ch}$ is a coefficient taking into account the positive impact of vegetation on erosion reduction. This coefficient is then dependent on the land use and classical values are shown in the table below. These values where then adapted for use with the GlobCover land use map. Percent of clay and silt (along with sand and gravel) for the channel is estimated from the river median particle diameter assuming the same values as SWAT shown in the table below. Median particle diameter is here estimated depending on the Strahler river order. The higher the order, the smaller the diameter is. As the median diameter is only used in wflow_sediment for the estimation of the river bed/bank sediment composition, this supposition should be enough. Actual refined data or calibration may however be needed if the median diameter is also required for the transport formula. In a similar way, the bulk densities of river bed and bank are also just assumed to be of respectively 1.5 and 1.4 g cm$^{-3}$.

    Table: Classical values of the channel cover vegetation coefficient (Julian and Torres, 2006)

    Bank vegetation$C_{ch}$
    None1.00
    Grassy1.97
    Sparse trees5.40
    Dense trees19.20

    Table : Composition of the river bed/bank depending on the median diameter $d_{50}$ [$\mu$m] (Neitsch et al, 2011)

    Sediment Fraction$\leq$ 55 to 5050 to 2000$>$2000
    Sand0.150.150.650.15
    Silt0.150.650.150.15
    Clay0.650.150.150.05
    Gravel0.050.050.050.65

    Then, the repartition of the flow shear stress is refined into the effective shear stress and the bed and bank of the river using the equations developed by Knight (1984) for a rectangular channel:

    \[ \tau_{e,\mathrm{bed}} = \rho g R_{H} S \left(1 - \dfrac{SF_{\mathrm{bank}}}{100}\right) \left(1+\dfrac{2h}{W}\right) \\~\\ + \tau_{e,\mathrm{bank}} = \rho g R_{H} S \left( SF_{\mathrm{bank}}\right) \left(1+\dfrac{W}{2h}\right)\]

    where $\rho g$ is the fluid specific weight ($\SI{9800}{N m^{-3}}$ for water), $\SIb{R_H}{m}$ is the hydraulic radius of the channel, $\SIb{h}{m}$ and $\SIb{W}{m}$ are the water level and river width. $SF_{\mathrm{bank}}$ is the proportion of shear stress acting on the bank (%) and is estimated from (Knight, 1984):

    \[ \mathrm{SF}_{\mathrm{bank}} = \exp \left( -3.230 \log_{10}\left(\dfrac{W}{h}+3\right)+6.146 \right)\]

    Finally the relative erosion potential of the bank and bed of the river is calculated by:

    \[ \mathrm{RTE}_{\mathrm{bed}} = \dfrac{E_{R,\mathrm{bed}}}{E_{R,\mathrm{bed}}+E_{R,\mathrm{bank}}} \\~\\ + \mathrm{RTE}_{\mathrm{bank}} = 1 - RTE_{\mathrm{bed}}\]

    And the final actual eroded amount for the bed and bank is the maximum between $\mathrm{RTE} \subtext{\mathrm{sed}}{exeff}$ and the erosion potential $E_R$. Total eroded amount of sediment $\subtext{\mathrm{sed}}{erod}$ is then the sum of the eroded sediment coming from the storage of previously deposited sediment and the river bed/bank erosion.

    River deposition

    As sediments have a higher density than water, moving sediments in water can be deposited in the river bed. The deposition process depends on the mass of the sediment, but also on flow characteristics such as velocity. In wflow_sediment, as in SWAT, deposition is modelled with Einstein's equation (Neitsch et al, 2011):

    \[ \subtext{P}{dep}=\left(1-\dfrac{1}{e^{x}}\right)100\]

    where $\subtext{P}{dep}$ is the percentage of sediments that is deposited on the river bed and x is a parameter calculated with:

    \[ x = \dfrac{1.055 L \omega_{s}}{u h}\]

    where $\SIb{L}{m}$ and $\SIb{h}{m}$ are channel length and water height, $\SIb{\omega_s}{m s^{-1}}$ is the particle settling velocity calculated with Stokes' formula and $\SIb{u}{m s^{-1}}$ is the mean flow velocity. The calculated percentage is then subtracted from the amount of sediment input and eroded river sediment for each particle size class ($\subtext{\mathrm{sed}}{dep} = \subtext{P}{dep}/100 (\subtext{\mathrm{sed}}{in} + \subtext{\mathrm{sed}}{erod})$). Resulting deposited sediment are then stored in the river bed and can be re-mobilized in future time steps by erosion.

    Mass balance and sediment concentration

    Finally after estimating inputs, deposition and erosion with the transport capacity of the flow, the amount of sediment actually leaving the river cell to go downstream is estimated using:

    \[ \subtext{\mathrm{sed}}{out} = (\subtext{\mathrm{sed}}{in} + \subtext{\mathrm{sed}}{erod} - \subtext{\mathrm{sed}}{dep}) \dfrac{\subtext{V}{out}}{V}\]

    where $\SIb{\subtext{\mathrm{sed}}{out}}{ton}$ is the amount of sediment leaving the river cell (tons), $\SIb{\subtext{\mathrm{sed}}{in}}{ton}$ is the amount of sediment coming into the river cell (storage from previous timestep, land erosion and sediment flux from upstream river cells), $\SIb{\subtext{\mathrm{sed}}{erod}}{ton}$ is the amount of sediment coming from river erosion, $\SIb{\subtext{\mathrm{sed}}{dep}}{ton}$ is the amount of deposited sediments, $\SIb{\subtext{V}{out}}{m^3}$ is the volume of water leaving the river cell (surface runoff $Q$ times timestep $\Delta t$) and $\SIb{V}{m^3}$ is the total volume of water in the river cell ($\subtext{V}{out}$ plus storage $h W L$).

    A mass balance is then used to calculate the amount of sediment remaining in the cell at the end of the timestep $(\subtext{\mathrm{sed}}{riv})_t$:

    \[ (\subtext{\mathrm{sed}}{riv})_t = (\subtext{\mathrm{sed}}{riv})_{t-1} + (\subtext{\mathrm{sed}}{land})_t + \mathrm{upstream}\left[(\subtext{\mathrm{sed}}{out})_{t-1}\right] + (\subtext{\mathrm{sed}}{erod})_t - (\subtext{\mathrm{sed}}{dep})_t - (\subtext{\mathrm{sed}}{out})_t\]

    Lake and reservoir modelling

    Apart from land and river, the hydrologic wflow_sbm model also handles lakes and reservoirs modelling. In wflow_sbm, lakes and large reservoirs are modelled using a 1D bucket model at the cell corresponding to the outlet. For the other cells belonging to the lake/reservoir which are not the outlet, processes such as precipitation and evaporation are filtered out and shifted to the outlet cell. wflow_sediment handles the lakes and reservoirs in the same way. If a cell belongs to a lake/reservoir and is not the outlet then the model assumes that no erosion/deposition of sediments is happening and the sediments are only all transported to the lake/reservoir outlet. Once the sediments reach the outlet, then sediments are deposited in the lake/reservoir according to Camp's model (1945) (Verstraeten et al, 2000):

    \[ \mathrm{TE} = \dfrac{\omega_s}{u_{cr,\mathrm{res}}} = \dfrac{\subtext{A}{res}}{\subtext{Q}{out,res}} \omega_s\]

    where $\mathrm{TE}$ is the trapping efficiency of the lake/reservoir (or the fraction of particles trapped), $\SIb{\omega_{s}}{m s^{-1}}$ is the particle velocity from Stokes, $\SIb{\subtext{u}{cr,res}}{m s^{-1}}$ is the reservoir's critical settling velocity which is equal to the reservoir's outflow $\SIb{\subtext{Q}{out,res}}{m^3 s^{-1}}$ divided by the reservoir's surface area $\SIb{\subtext{A}{res}}{m^2}$.

    For reservoirs, coarse sediment particles from the bed load are also assumed to be trapped by the dam structure. This adding trapping is taken into account with a reservoir trapping efficiency coefficient for large particles (between $0$ and $1$). Depending on the type of the dam, all bed load particles are trapped (restrapefficiency = 1.0, for example for a gravity dam) or only partly (for example for run-of-the-river dams).

    Lake and reservoir modelling is enabled in the model section of the TOML and require the extra following input arguments:

    [model]
    +doreservoir = true
    +dolake = false
    +
    +[input.vertical]
    +# Reservoir
    +resareas = "wflow_reservoirareas"
    +# Lake
    +lakeareas = "wflow_lakeareas"
    +
    +[input.lateral.river]
    +# Reservoir
    +resarea = "ResSimpleArea"
    +restrapefficiency = "ResTrapEff"
    +resareas = "wflow_reservoirareas"
    +reslocs = "wflow_reservoirlocs"
    +# Lake
    +lakearea = "LakeArea"
    +lakeareas = "wflow_lakeareas"
    +lakelocs = "wflow_lakelocs"

    Note that in the inland part, lake and reservoir coverage are used to filter erosion and transport in overland flow.

    References

    • K.C. Abbaspour, J. Yang, I. Maximov, R. Siber, K. Bogner, J. Mieleitner, J. Zobrist, and R.Srinivasan. Modelling hydrology and water quality in the pre-alpine/alpine Thur watershed using SWAT. Journal of Hydrology, 333(2-4):413-430, 2007. 10.1016/j.jhydrol.2006.09.014
    • P. Borrelli, M. Märker, P. Panagos, and B. Schütt. Modeling soil erosion and river sediment yield for an intermountain drainage basin of the Central Apennines, Italy. Catena, 114:45-58, 2014. 10.1016/j.catena.2013.10.007
    • F. Engelund and E. Hansen. A monograph on sediment transport in alluvial streams. Technical University of Denmark 0stervoldgade 10, Copenhagen K., 1967.
    • G. Govers. Empirical relationships for the transport capacity of overland flow. IAHS Publication, (January 1990):45-63 ST, 1990.
    • G.J Hanson and A Simon. Erodibility of cohesive streambeds in the loess area of the midwestern USA. Hydrological Processes, 15(May 1999):23-38, 2001.
    • R Hessel and V Jetten. Suitability of transport equations in modelling soil erosion for a small Loess Plateau catchment. Engineering Geology, 91(1):56-71, 2007. 10.1016/j.enggeo.2006.12.013
    • J.P Julian, and R. Torres. Hydraulic erosion of cohesive riverbanks. Geomorphology, 76:193-206, 2006. 10.1016/j.geomorph.2005.11.003
    • D.W. Knight, J.D. Demetriou, and M.E. Hamed. Boundary Shear in Smooth Rectangular Channels. J. Hydraul. Eng., 110(4):405-422, 1984. 10.1061/(ASCE)0733-9429(1987)113:1(120)
    • S.L Neitsch, J.G Arnold, J.R Kiniry, and J.R Williams. SWAT Theoretical Documentation Version 2009. Texas Water Resources Institute, pages 1-647, 2011. 10.1016/j.scitotenv.2015.11.063
    • C. Oeurng, S. Sauvage, and J.M. Sanchez-Perez. Assessment of hydrology, sediment and particulate organic carbon yield in a large agricultural catchment using the SWAT model. Journal of Hydrology, 401:145-153, 2011. 10.1016/j.hydrol.2011.02.017
    • A. Simon, N. Pollen-Bankhead, and R.E Thomas. Development and application of a deterministic bank stability and toe erosion model for stream restoration. Geophysical Monograph Series, 194:453-474, 2011. 10.1029/2010GM001006
    • G. Verstraeten and J. Poesen. Estimating trap efficiency of small reservoirs and ponds: methods and implications for the assessment of sediment yield. Progress in Physical Geography, 24(2):219-251, 2000. 10.1177/030913330002400204
    • O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, and J. Poesen. Adapting SWAT hillslope erosion model to predict sediment concentrations and yields in large Basins. Science of the Total Environment, 538:855-875, 2015. 10.1016/j.scitotenv.2015.08.095
    • O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, F. Obreja, J. Poesen, H. Habersack, J. Feher, and S. Groselj. Modelling sediment fluxes in the Danube River Basin with SWAT. Science of the Total Environment, 2017. 10.1016/j.scitotenv.2017.04.236
    diff --git a/previews/PR490/model_docs/lateral/waterbodies/index.html b/previews/PR490/model_docs/lateral/waterbodies/index.html new file mode 100644 index 000000000..4a8f5ca42 --- /dev/null +++ b/previews/PR490/model_docs/lateral/waterbodies/index.html @@ -0,0 +1,43 @@ + +Reservoirs and Lakes · Wflow.jl

    Reservoirs and Lakes

    Simplified reservoirs and lakes models can be included as part of the river network.

    Reservoirs

    Simple reservoirs can be included within the river routing by supplying the following reservoir parameters:

    • locs - Outlet of the reservoirs in which each reservoir has a unique id
    • area - Surface area of the reservoirs $\SIb{}{m^2}$
    • areas - Reservoir coverage
    • targetfullfrac - Target fraction full (of max storage) for the reservoir: number between 0 and 1
    • targetminfrac - Target minimum full fraction (of max storage). Number between 0 and 1
    • maxvolume - Maximum reservoir storage (above which water is spilled) $\SIb{}{m^3}$
    • demand - Minimum (environmental) flow requirement downstream of the reservoir $\SIb{}{m^3 s^{-1}}$
    • maxrelease - Maximum $Q$ that can be released if below spillway $\SIb{}{m^3 s^{-1}}$

    By default the reservoirs are not included in the model. To include them put the following lines in the TOML file of the model:

    [model]
    +reservoirs = true

    Finally there is a mapping required between external and internal parameter names in the TOML file, with below an example:

    [input]
    +
    +[input.lateral.river.reservoir]
    +area = "ResSimpleArea"
    +areas = "wflow_reservoirareas"
    +demand = "ResDemand"
    +locs = "wflow_reservoirlocs"
    +maxrelease = "ResMaxRelease"
    +maxvolume = "ResMaxVolume"
    +targetfullfrac = "ResTargetFullFrac"
    +targetminfrac = "ResTargetMinFrac"

    Lakes (unregulated and regulated)

    Lakes are modelled using a mass balance approach:

    \[ \dfrac{S(t + \Delta t)}{\Delta t} = \dfrac{S(t)}{\Delta t} + \subtext{Q}{in} + \dfrac{(P-E) A}{\Delta t} - \subtext{Q}{out}\]

    where $\SIb{S}{m^3}$ is lake storage, $\SIb{\Delta t}{s}$ is the model timestep, $\SIb{\subtext{Q}{in}}{m^3 s^{-1}}$ is the sum of inflows (river, overland and lateral subsurface flow), $\SIb{\subtext{Q}{out}}{m^3 s^{-1}}$ is the lake outflow at the outlet, $\SIb{P}{m}$ is precipitation, $\SIb{E}{m}$ is lake evaporation and $\SIb{A}{m^2}$ is the lake surface area.

    lake_schematisation

    Lake schematization.

    Most of the variables in this equation are already known or coming from previous timestep, apart from $S(t+ \Delta t)$ and $\subtext{Q}{out}$ which can both be linked to the water level $H$ in the lake using a storage curve $S = f(H)$ and a rating curve $Q = f(H)$. In wflow, several options are available to select storage and rating curves, and in most cases, the mass balance is then solved by linearization and iteration or using the Modified Puls Approach from Maniak (Burek et al., 2013). Storage curves in wflow can either:

    • Come from the interpolation of field data linking volume and lake height,
    • Be computed from the simple relationship $S = A H$.

    Rating curves in wflow can either:

    • Come from the interpolation of field data linking lake outflow and water height, also appropriate for regulated lakes/ dams,
    • Be computed from a rating curve of the form $\subtext{Q}{out} = \alpha (H-H_0)^\beta$, where $H_{0}$ is the minimum water level under which the outflow is zero. Usual values for $\beta$ are $\frac{3}{2}$ for a rectangular weir or $2$ for a parabolic weir (Bos, 1989).

    Modified Puls Approach

    The Modified Puls Approach is a resolution method of the lake balance that uses an explicit relationship between storage and outflow. Storage is assumed to be equal to $A H$ and the rating curve for a parabolic weir ($\beta = 2$):

    \[ S = A H = A (h + H_{0}) = A \sqrt{\frac{Q}{\alpha}} + A H_0\]

    Inserting this equation in the mass balance gives:

    \[ \dfrac{A}{\Delta t} \sqrt{\frac{Q}{\alpha}} + Q = \dfrac{S(t)}{\Delta t} + \subtext{Q}{in} + + A\dfrac{P-E}{\Delta t} - \dfrac{A H_0}{\Delta t} = \mathrm{SI} - \dfrac{A H_0}{\Delta t}\]

    The solution for $Q$ is then:

    \[ Q = + \begin{cases} + \begin{align*} + \frac{1}{4}\left(-\mathrm{LF} + \sqrt{\mathrm{LF}^{2} + 4 \left(\mathrm{SI} - \dfrac{A H_0}{\Delta t} \right)} + \right)^2 &\text{ if }\quad \mathrm{SI} > \dfrac{A H_0}{\Delta t} \\ + 0 &\text{ if }\quad \mathrm{SI} \leq \dfrac{A H_0}{\Delta t} + \end{align*} + \end{cases}\]

    where

    \[ \mathrm{LF} = \dfrac{A}{\Delta t \sqrt{\alpha}}.\]

    Lake parameters

    Lakes can be included within the kinematic wave river routing in wflow, by supplying the following parameters:

    • area - Surface area of the lakes [m$^2$]
    • areas - Coverage of the lakes
    • locs - Outlet of the lakes in which each lake has a unique id
    • linkedlakelocs - Outlet of linked (downstream) lakes (unique id)
    • waterlevel - Lake water level [m], used to reinitiate lake model
    • threshold - Water level threshold $H_{0}$ under which outflow is zero [m]
    • storfunc - Type of lake storage curve ; 1 for $S = AH$ (default) and 2 for $S = f(H)$ from lake data and interpolation
    • outflowfunc - Type of lake rating curve ; 1 for $Q = f(H)$ from lake data and interpolation, 2 for general $Q = b(H - H_{0})^{e}$ and 3 in the case of Puls Approach $Q = b(H - H_{0})^{2}$ (default)
    • b - Rating curve coefficient
    • e - Rating curve exponent

    By default, the lakes are not included in the model. To include them, put the following line in the TOML file of the model:

    [model]
    +lakes = true

    There is also a mapping required between external and internal parameter names in the TOML file, with below an example:

    [input]
    +
    +[input.lateral.river.lake]
    +area = "lake_area"
    +areas = "wflow_lakeareas"
    +b = "lake_b"
    +e = "lake_e"
    +locs = "wflow_lakelocs"
    +outflowfunc = "lake_outflowfunc"
    +storfunc  = "lake_storfunc"
    +threshold  = "lake_threshold"
    +waterlevel = "lake_waterlevel"

    Additional settings

    Storage and rating curves from field measurement can be supplied to wflow via CSV files supplied in the same folder of the TOML file. Naming of the files uses the ID of the lakes where data are available and is of the form lake_sh_1.csv and lake_hq_1.csv for respectively the storage and rating curves of lake with ID 1.

    The storage curve is stored in a CSV file with lake level $\SIb{}{m}$ in the first column H and corresponding lake storage $\SIb{}{m^3}$ in the second column S:

    H,  S
    +392.21, 0
    +393.21, 430202000
    +393.71, 649959000
    +394.21, 869719000

    The rating curve uses level and discharge data depending on the Julian day of the year (JDOY), and can be also used for regulated lakes/ dams. The first line contains H for the first column. The other lines contain the water level and the corresponding discharges for the different JDOY (1-365), see also the example below, that shows part of a CSV file (first 4 Julian days). The volume above the maximum water level of the rating curve is assumed to flow instantaneously out of the lake (overflow).

    H
    +394,    43,     43,     43,     43
    +394.01, 44.838, 44.838, 44.838, 44.838
    +394.02, 46.671, 46.671, 46.671, 46.671
    +394.03, 48.509, 48.509, 48.509, 48.509
    +394.04, 50.347, 50.347, 50.347, 50.347
    +394.05, 52.179, 52.179, 52.179, 52.179

    Linked lakes: In some cases, lakes can be linked and return flow can be allowed from the downstream to the upstream lake. The linked lakes are defined in the linkedlakelocs parameter that represent the downstream lake location ID, at the grid cell of the upstream lake location.

    Note

    In every file, level units are meters [m] above lake bottom and not meters above sea level [m asl]. Especially with storage/rating curves coming from data, please be careful and convert units if needed.

    References

    • Bos M.G., 1989. Discharge measurement structures. Third revised edition, International Institute for Land Reclamation and Improvement ILRI, Wageningen, The Netherlands.
    • Burek P., Van der Knijf J.M., Ad de Roo, 2013. LISFLOOD – Distributed Water Balance and flood Simulation Model – Revised User Manual. DOI: http://dx.doi.org/10.2788/24719.
    diff --git a/previews/PR490/model_docs/model_configurations/index.html b/previews/PR490/model_docs/model_configurations/index.html new file mode 100644 index 000000000..d5f85414f --- /dev/null +++ b/previews/PR490/model_docs/model_configurations/index.html @@ -0,0 +1,86 @@ + +Model configurations · Wflow.jl

    Model configurations

    wflow_sbm

    Wflow_sbm represents hydrological models derived from the CQflow model (Köhler et al., 2006) that have the SBM vertical concept in common, but can have different lateral concepts that control how water is routed for example over the land or river domain. The soil part of SBM is largely based on the Topog_SBM model but has had considerable changes over time. Topog_SBM is specifically designed to simulate fast runoff processes in small catchments while the wflow_sbm model can be applied more widely. The main differences are for the vertical concept SBM of wflow_sbm:

    • The unsaturated zone can be split-up in different layers
    • The addition of evapotranspiration losses
    • The addition of a capillary rise
    • The addition of water demand and allocation

    The water demand and allocation computations are supported by the wflow_sbm model configurations:

    The vertical SBM concept is explained in more detail in the following section SBM vertical concept.

    Topog_SBM uses an element network based on contour lines and trajectories for water routing. Wflow_sbm models differ in how the lateral components river, land, and subsurface are solved. Below the different wflow_sbm model configurations are described.

    SBM + Kinematic wave

    For the lateral components of this wflow_sbm model water is routed over a D8 network, and the kinematic wave approach is used for river, overland and lateral subsurface flow. This is described in more detail in the section Kinematic wave.

    An overview of the different processes and fluxes in the wflow_sbm model with the kinematic wave approach for river, overland and lateral subsurface flow:

    wflow_sbm model

    Below the mapping for this wflow_sbm model (type sbm) to the vertical SBM concept (instance of struct SBM) and the different lateral concepts is presented. For an explanation about the type parameters between curly braces after the struct name see the section on the model parameters.

    vertical => struct SBM{T,N,M}
    +lateral.subsurface => struct LateralSSF{T}
    +lateral.land => struct SurfaceFlow{T,R,L}
    +lateral.river => struct SurfaceFlow{T,R,L}
    +lateral.river.lake => struct NaturalLake{T} # optional
    +lateral.river.reservoir => struct SimpleReservoir{T} # optional

    SBM + Groundwater flow

    For river and overland flow the kinematic wave approach over a D8 network is used for this wflow_sbm model. For the subsurface domain, an unconfined aquifer with groundwater flow in four directions (adjacent cells) is used. This is described in more detail in the section Groundwater flow.

    [model]
    +type = "sbm_gwf"
    +
    +[input.lateral.subsurface]
    +ksathorfrac = "KsatHorFrac"
    +conductivity = "conductivity"
    +specific_yield = "specific_yield"
    +exfiltration_conductance = "exfilt_cond"
    +infiltration_conductance = "infilt_cond"
    +river_bottom = "river_bottom"
    +conductivity_profile = "exponential"
    +gwf_f.value = 3.0

    Below the mapping for this wflow_sbm model (type sbm_gwf) to the vertical SBM concept (instance of struct SBM) and the different lateral concepts. For an explanation about the type parameters between curly braces after the struct name see the section on model parameters.

    vertical => struct SBM{T,N,M}
    +lateral.subsurface.flow => struct GroundwaterFlow{A, B}
    +lateral.subsurface.recharge => struct Recharge{T} <: AquiferBoundaryCondition
    +lateral.subsurface.river => struct River{T} <: AquiferBoundaryCondition
    +lateral.subsurface.drain => struct Drainage{T} <: AquiferBoundaryCondition # optional
    +lateral.land => struct SurfaceFlow{T,R,L}
    +lateral.river => struct SurfaceFlow{T,R,L}
    +lateral.river.lake => struct NaturalLake{T} # optional
    +lateral.river.reservoir => struct SimpleReservoir{T} # optional

    SBM + Local inertial river

    By default the model types sbm and sbm_gwf use the kinematic wave approach for river flow. There is also the option to use the local inertial model for river flow with an optional 1D floodplain schematization (routing is done separately for the river channel and floodplain), by providing the following in the TOML file:

    [model]
    +river_routing = "local-inertial"    # optional, default is "kinematic-wave"
    +floodplain_1d = true                # optional, default is false

    Only the mapping for the river component changes, as shown below. For an explanation about the type parameters between curly braces after the struct name see the section on the model parameters.

    lateral.river => struct ShallowWaterRiver{T,R,L}

    SBM + Local inertial river (1D) and land (2D)

    By default the model types sbm and sbm_gwf use the kinematic wave approach for river and overland flow. There is also the option to use the local inertial model for 1D river and 2D overland flow, by providing the following in the TOML file:

    [model]
    +river_routing = "local-inertial"
    +land_routing = "local-inertial"

    The mapping for the river and land component changes, as shown below. For an explanation about the type parameters between curly braces after the struct name see the section on the model parameters.

    lateral.river => struct ShallowWaterRiver{T,R,L}
    +lateral.land => struct ShallowWaterLand{T}

    The local inertial approach is described in more detail in the section Local inertial model.

    wflow_hbv

    The Hydrologiska Byrans Vattenbalansavdelning (HBV) model was introduced back in 1972 by the Swedish Meteological and Hydrological Institute (SMHI). The HBV model is mainly used for runoff simulation and hydrological forecasting. The model is particularly useful for catchments where snow fall and snow melt are dominant factors, but application of the model is by no means restricted to these type of catchments.

    The model is based on the HBV-96 model. However, the hydrological routing represented in HBV by a triangular function controlled by the MAXBAS parameter has been removed. Instead, the kinematic wave function is used to route the water downstream. All runoff that is generated in a cell in one of the HBV reservoirs is added to the kinematic wave reservoir at the end of a timestep. There is no connection between the different HBV cells within the model.

    A catchment is divided into a number of grid cells. For each of the cells individually, daily runoff is computed through application of the HBV-96 of the HBV model. The use of the grid cells offers the possibility to turn the HBV modelling concept, which is originally lumped, into a distributed model.

    wflow_hbv model

    The figure above shows a schematic view of hydrological response simulation with the HBV-modelling concept. The land-phase of the hydrological cycle is represented by three different components: a snow routine, a soil routine and a runoff response routine. Each component is discussed in more detail below.

    The vertical HBV concept is described in section HBV vertical concept. The routing for river and overland flow is described in the section Kinematic wave.

    Below the mapping for wflow_hbv (type hbv) to the vertical HBV concept (instance of struct HBV) and the different lateral concepts. For an explanation about the type parameters between curly braces after the struct name see the section on model parameters.

    vertical => struct HBV{T}
    +lateral.subsurface => struct LateralSSF{T}
    +lateral.land => struct SurfaceFlow{T,R,L}
    +lateral.river => struct SurfaceFlow{T,R,L}
    +lateral.river.lake => struct NaturalLake{T} # optional
    +lateral.river.reservoir => struct SimpleReservoir{T} # optional

    wflow_flextopo

    The FLEXTopo model is a process-based model, which consists of different parallel classes connected through their groundwater storage. These classes are usually delineated from topographical data to represent the variability in hydrological processes across user-defined Hydrological Response Units (HRU). The main assumption underlying the concept, which was first introduced by Savenije (2010), is that different parts of the landscape fulfill different tasks in runoff generation and, hence, can be represented by different model structures. The strength of the concept is that the definition of classes and associated model structures is modular and flexible and not fixed to a predefined model structure. The flexible approach allows to develop process-based models for different topographic, climatic, geologic and land use conditions, making use of the available data and expert knowledge.

    The kinematic wave function is used to route the water downstream. In a similar way as for HBV, all runoff that is generated in a cell in one of the FLEXTopo storages is added to the kinematic wave reservoir at the end of a timestep. There is no connection between the different vertical FLEXTopo cells within the model. The FLEXTopo model is implemented in a fully distributed way in the wflow Julia framework.

    In wflow_flextopo, the user is free to determine the number of classes and which model components to include or exclude for each class, this is done in the TOML file. Currently, for each storage, it is possible to bypass the storage and pass on the fluxes to the next model component. Interested users can contribute to the code by adding other conceptualizations for each storage components.

    [model]
    +type = "flextopo"
    +classes = ["h", "p", "w"]     #user can set the number and name of each class.
    +
    +# for each component which is class specific, the user can select which conceptualization
    +# to apply for each class as defined above in classes = ["h", "p", "w"]
    +select_snow = ["common_snow_hbv"]
    +# available options are ["common_snow_hbv", "common_snow_no_storage"]
    +select_interception = ["interception_overflow", "interception_overflow", "interception_overflow"]
    +# available options are ["interception_overflow", "interception_no_storage"]
    +select_hortonponding = ["hortonponding_no_storage", "hortonponding_no_storage", "hortonponding_no_storage"]
    +# available options are ["hortonponding", "hortonponding_no_storage"]
    +select_hortonrunoff = ["hortonrunoff_no_storage", "hortonrunoff_no_storage", "hortonrunoff_no_storage"]
    +# available options are ["hortonrunoff", "hortonrunoff_no_storage"]
    +select_rootzone = ["rootzone_storage", "rootzone_storage", "rootzone_storage"]
    +# available options are ["rootzone_storage", "rootzone_no_storage"]
    +select_fast = ["fast_storage", "fast_storage", "fast_storage"]
    +# available options are ["fast_storage", "fast_no_storage"]
    +select_slow = ["common_slow_storage"]
    +# available options are ["common_slow_storage", "slow_no_storage"]

    A schematic representation of the most complete model structure including all storage components, as currently implemented in the code, is shown in the Figure below. When setting up the model with multiple classes, model structures can be adapted by bypassing storages or turning parameter values on or off (e.g.: percolation or capillary rise, non-linear versus linear outflow of the fast runoff etc.), an example of a three class model is shown in FLEXTopo vertical concept.

    flextopo_julia_1class.png Schematic representation of the FLEXTopo model for a single class model including all storages and fluxes. Main parameters are denoted in red.

    In the staticmaps, the user needs to provide maps of the fraction of each class within each cell, as shown below with hrufrac. For each model parameter which is class specific, an extra dimension classes is required in the staticmaps netcdf. For an example model, see FLEXTopo example model.

    [input.vertical]
    +hrufrac = "hrufrac_lu"

    Parameter multiplication of model parameters which are defined for several classes is possible through the TOML file:

    [input.vertical.kf]
    +netcdf.variable.name = "kf"
    +scale = [1.0, 3.0, 4.0]
    +offset = [0.0, 0.0, 0.0]
    +class = ["h", "p", "w"]

    wflow_sediment

    The processes and fate of many particles and pollutants impacting water quality at the catchment level are intricately linked to the processes governing sediment dynamics. Both nutrients such as phosphorus, carbon or other pollutants such as metals are influenced by sediment properties in processes such as mobilization, flocculation or deposition. To better assert and model water quality in inland systems, a better comprehension and modelling of sediment sources and fate in the river is needed at a spatial and time scale relevant to such issues.

    The wflow_sediment model was developed to answer such issues. It is a distributed physics-based model, based on the distributed hydrologic wflow_sbm model. It is able to simulate both land and in-stream processes, and relies on available global datasets, parameter estimation and small calibration effort.

    In order to model the exports of terrestrial sediment to the coast through the Land Ocean Aquatic Continuum or LOAC (inland waters network such as streams, lakes...), two different modelling parts were considered. The first part, called the inland sediment model, is the modelling and estimation of soil loss and sediment yield to the river system by land erosion, separated into vertical Soil Erosion processes and lateral Sediment Flux in overland flow. The second part, called the River Sediment Model is the transport and processes of the sediment in the river system. The two parts together constitute the wflow_sediment model.

    Overview of the concepts of the wflow_sediment model: wflow_sediment

    Configuration

    As sediment generation and transport processes are linked to the hydrology and water flows, the inputs to the wflow_sediment model come directly from a hydrological model. The required dynamic inputs to run wflow_sediment are:

    • Precipitation (can also come from the hydrological forcing data),
    • Land runoff (overland flow) from the kinematic wave,
    • River runoff from the kinematic wave,
    • Land water level in the kinematic wave,
    • River water level in the kinematic wave,
    • Rainfall interception by the vegetation.

    These inputs can be obtained from other wflow models such as wflow_sbm, wflow_hbv or from other sources.

    Model outputs can be saved for both the inland and the instream part of the model. Some examples are listed below.

    [output.vertical]
    +# Soil splash erosion [ton]
    +sedspl = "sedspl"
    +# Soil erosion by overland flow [ton]
    +sedov = "sedov"
    +# Total soil loss [ton]
    +soilloss = "soilloss"
    +# Total transport capacity of overland flow [ton]
    +TCsed = "TCsed"
    +# Transport capacity per particle class (clay) [ton]
    +TCclay = "TCclay"
    +
    +[output.lateral.land]
    +# Total (or per particle class) sediment flux in overland flow [ton]
    +olsed = "olsed"
    +olclay = "olclay"
    +# Total (or per particle class) sediment yield to the river [ton]
    +inlandsed = "inlandsed"
    +inlandclay = "inlandclay"
    +
    +[output.lateral.river]
    +# Total sediment concentration in the river (suspended + bed load) [kg/m3]
    +Sedconc = "Sedconc"
    +# Suspended load [kg/m3]
    +SSconc = "SSconc"
    +# Bed load [kg/m3]
    +Bedconc = "Bedconc"

    References

    • Köhler, L., Mulligan, M., Schellekens, J., Schmid, S., Tobón, C., 2006, Hydrological impacts of converting tropical montane cloud forest to pasture, with initial reference to northern Costa Rica. Final Technical Report DFID‐FRP Project No. R799.

    • Savenije, H. H. G. (2010). HESS opinions “topography driven conceptual modelling (FLEX-Topo).” Hydrology and Earth System Sciences, 14(12), 2681–2692. https://doi.org/10.5194/hess-14-2681-2010

    diff --git a/previews/PR490/model_docs/params_lateral/index.html b/previews/PR490/model_docs/params_lateral/index.html new file mode 100644 index 000000000..ba053989c --- /dev/null +++ b/previews/PR490/model_docs/params_lateral/index.html @@ -0,0 +1,15 @@ + +Parameters lateral concepts · Wflow.jl

    Parameters lateral concepts

    Kinematic wave

    Surface flow

    The Table below shows the parameters (fields) of struct SurfaceFlowRiver used for river flow, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river] to map the internal model parameter to the external netCDF variable. The input parameter slope (listed under [input.lateral.river]) is not equal to the internal model parameter sl, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    betaconstant in Manning's equation--
    sl (slope)slopem m$^{-1}$-
    nManning's roughnesss m$^{-\frac{1}{3}}$0.036
    dllengthm-
    qdischargem$^3$ s$^{-1}$-
    qininflow from upstream cellsm$^3$ s$^{-1}$-
    q_avaverage dischargem$^3$ s$^{-1}$-
    qlatlateral inflow per unit lengthm$^2$ s$^{-1}$-
    inwaterlateral inflowm$^3$ s$^{-1}$-
    inflowexternal inflow (abstraction/supply/demand)m$^3$ s$^{-1}$0.0
    inflow_wbinflow waterbody (lake or reservoir model) from land partm$^3$ s$^{-1}$0.0
    abstractionabstraction (computed as part of water demand and allocation)m$^3$ s$^{-1}$0.0
    volumekinematic wave volumem$^3$-
    hwater levelm-
    h_avaverage water levelm-
    bankfull_depthbankfull river depthm1.0
    dtmodel time steps-
    itsnumber of fixed iterations--
    widthwidthm-
    alpha_powused in the power part of $\alpha$--
    alpha_termterm used in computation of $\alpha$--
    alphaconstant in momentum equation $A = \alpha Q^{\beta}$s$^{\frac{3}{5}}$ m$^{\frac{1}{5}}$-
    celcelerity of kinematic wavem s$^{-1}$-
    reservoir_indexmap cell to 0 (no reservoir) or i (pick reservoir i in reservoir field)--
    lake_indexmap cell to 0 (no lake) or i (pick lake i in lake field)--
    reservoiran array of reservoir models SimpleReservoir--
    lakean array of lake models Lake--
    allocationwater allocation of type AllocationRiver--
    kinwave_itboolean for kinematic wave iterations-false

    The Table below shows the parameters (fields) of struct SurfaceFlowLand used for overland flow, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.land] to map the internal model parameter to the external netCDF variable. The input parameter slope (listed under [input.lateral.land]) is not equal to the internal model parameter sl, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    betaconstant in Manning's equation--
    sl (slope)slopem m$^{-1}$-
    nManning's roughnesss m$^{-\frac{1}{3}}$0.072
    dllengthm-
    qdischargem$^3$ s$^{-1}$-
    qininflow from upstream cellsm$^3$ s$^{-1}$-
    q_avaverage dischargem$^3$ s$^{-1}$-
    qlatlateral inflow per unit lengthm$^2$ s$^{-1}$-
    inwaterlateral inflowm$^3$ s$^{-1}$-
    volumekinematic wave volumem$^3$-
    hwater levelm-
    h_avaverage water levelm-
    dtmodel time steps-
    itsnumber of fixed iterations--
    widthwidthm-
    alpha_powused in the power part of $\alpha$--
    alpha_termterm used in computation of $\alpha$--
    alphaconstant in momentum equation $A = \alpha Q^{\beta}$s$^{\frac{3}{5}}$ m$^{\frac{1}{5}}$-
    celcelerity of kinematic wavem s$^{-1}$-
    to_riverpart of overland flow that flows to the riverm$^3$ s$^{-1}$-
    kinwave_itboolean for kinematic wave iterations-false

    Reservoirs

    The Table below shows the parameters (fields) of struct SimpleReservoir, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river.reservoir], to map the internal model parameter to the external netCDF variable.

    Two parameters reservoir coverage areas and the outlet of reservoirs (unique id) locs that are not part of the SimpleReservoir struct are also required, and can be set as follows through the TOML file:

    [input.lateral.river.reservoir]
    +areas = "wflow_reservoirareas"
    +locs = "wflow_reservoirlocs"
    parameterdescriptionunitdefault
    areaaream$^2$-
    demandminimum (environmental) flow requirement downstream of the reservoirm$^3$ s$^{-1}$-
    maxreleasemaximum amount that can be released if below spillwaym$^3$ s$^{-1}$-
    maxvolumemaximum storage (above which water is spilled)m$^3$-
    targetfullfractarget fraction full (of max storage)--
    targetminfractarget minimum full fraction (of max storage)--
    demandreleaseminimum (environmental) flow released from reservoirm$^3$ s$^{-1}$-
    dtmodel time steps-
    volumevolumem$^3$-
    inflowtotal inflow into reservoirm$^3$-
    outflowoutflow into reservoirm$^3$ s$^{-1}$-
    totaloutflowtotal outflow into reservoirm$^3$-
    percfullfraction full (of max storage)--
    precipitationaverage precipitation for reservoir areamm Δt⁻¹-
    evaporationaverage potential evaporation for reservoir areamm Δt⁻¹-
    actevapaverage actual evaporation for lake areamm Δt⁻¹-

    Lakes

    The Table below shows the parameters (fields) of struct Lake, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river.lake], to map the internal model parameter to the external netCDF variable.

    Two parameters lake coverage areas and the outlet of lakes (unique id) locs that are not part of the Lake struct are also required, and can be set as follows through the TOML file:

    [input.lateral.river.lake]
    +areas = "wflow_lakeareas"
    +locs = "wflow_lakelocs"

    The input parameter linkedlakelocs (listed under [input.lateral.river.lake]) is not equal to the internal model parameter lowerlake_ind, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    areaaream$^2$-
    bRating curve coefficient--
    eRating curve exponent--
    outflowfunctype of lake rating curve--
    storfunctype of lake storage curve--
    thresholdwater level threshold $H_0$ below that level outflow is zerom-
    waterlevelwaterlevel $H$ of lakem-
    lowerlake_ind (linkedlakelocs)Index of lower lake (linked lakes)-0
    shdata for storage curve--
    hqdata rating curve--
    dtmodel time steps-
    inflowtotal inflow to the lakem$^3$-
    storagestorage lakem$^3$-
    maxstoragemaximum storage lake with rating curve type 1m$^3$-
    outflowoutflow lakem$^3$ s$^{-1}$-
    totaloutflowtotal outflow lakem$^3$-
    precipitationaverage precipitation for lake areamm Δt⁻¹-
    evaporationaverage potential evaporation for lake areamm Δt⁻¹-
    actevapaverage actual evaporation for lake areamm Δt⁻¹-

    Lateral subsurface flow

    The Table below shows the parameters (fields) of struct LateralSSF, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF). The soil related parameters f, soilthickness, z_exp, theta_s and theta_r are derived from the vertical SBM concept (including unit conversion for f, z_exp and soilthickness), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable. The internal slope model parameter slope is set through the TOML file as follows:

    [input.lateral.land]
    +slope = "Slope"

    The parameter kh_0 is computed by multiplying the vertical hydraulic conductivity at the soil surface kv_0 (including unit conversion) of the vertical SBM concept with the internal parameter khfrac [-] (default value of 1.0). The internal model parameter khfrac is set through the TOML file as follows:

    [input.lateral.subsurface]
    +ksathorfrac = "KsatHorFrac"

    The khfrac parameter compensates for anisotropy, small scale kv_0 measurements (soil core) that do not represent larger scale hydraulic conductivity, and smaller flow length scales (hillslope) in reality, not represented by the model resolution.

    For the vertical SBM concept different vertical hydraulic conductivity depth profiles are possible, and these also determine which LateralSSF parameters are used including the input requirements for the computation of lateral subsurface flow. For the exponential profile the model parameters kh_0 and f are used. For the exponential_constant profile kh_0 and f are used, and z_exp is required as part of [input.vertical]. For the layered profile, SBM model parameter kv is used, and for the layered_exponential profile kv is used and z_exp is required as part of [input.vertical].

    parameterdescriptionunitdefault
    kh_0horizontal hydraulic conductivity at soil surfacem d$^{-1}$3.0
    fa scaling parameter (controls exponential decline of kh_0)m$^{-1}$1.0
    khhorizontal hydraulic conductivitym d$^{-1}$-
    khfrac (ksathorfrac)a muliplication factor applied to vertical hydraulic conductivity kv-100.0
    soilthicknesssoil thicknessm2.0
    theta_ssaturated water content (porosity)-0.6
    theta_rresidual water content-0.01
    dtmodel time stepd-
    slopeslopem m$^{-1}$-
    dldrain lengthm-
    dwdrain widthm-
    zipseudo-water table depth (top of the saturated zone)m-
    z_expdepth from soil surface for which exponential decline of kh_0 is validm-
    exfiltwaterexfiltration (groundwater above surface level, saturated excess conditions)m Δt⁻¹-
    rechargenet recharge to saturated storem$^2$ Δt⁻¹-
    ssfsubsurface flowm$^3$ d${-1}$-
    ssfininflow from upstream cellsm$^3$ d${-1}$-
    ssfmaxmaximum subsurface flowm$^2$ d${-1}$-
    to_riverpart of subsurface flow that flows to the riverm$^3$ d${-1}$-
    volumesubsurface water volumem$^3$-

    Local inertial

    River flow

    The Table below shows the parameters (fields) of struct ShallowWaterRiver, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river], to map the internal model parameter to the external netCDF variable. The parameter river bed elevation zb is based on the bankfull elevation and depth input data:

    [input.lateral.river]
    +bankfull_elevation = "RiverZ"
    +bankfull_depth = "RiverDepth"

    When floodplain routing (parameter floodplain) is included as part of local inertial river flow, parameter q_av represents the total average discharge of the river channel and floodplain routing, and parameter q_channel_av represents average river channel discharge. Otherwise parameters q_av and q_channel_av represent both average river channel discharge (are equal).

    The input parameter n (listed under [input.lateral.river]) is not equal to the internal model parameter mannings_n, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    mannings_n (n)Manning's roughnesss m$^{-\frac{1}{3}}$0.036
    widthriver widthm-
    zbriver bed elevationm-
    lengthriver lengthm-
    nnumber of cells--
    nenumber of edges/links--
    active_nactive nodes--
    active_eactive edges--
    gacceleration due to gravitym s$^{-2}$-
    alphastability coefficient (Bates et al., 2010)-0.7
    h_threshdepth threshold for calculating flowm0.001
    dtmodel time steps-
    qriver discharge (subgrid channel)m$^3$ s$^{-1}$-
    q_avaverage river channel (+ floodplain) dischargem$^3$ s$^{-1}$-
    q_channel_avaverage river channel dischargem$^3$ s$^{-1}$-
    zb_maxmaximum channel bed elevationm-
    mannings_n_sqManning's roughness squared at edge/link(s m$^{-\frac{1}{3}}$)$^2$-
    hwater depthm-
    zs_maxmaximum water elevationm-
    zs_srcwater elevation of source node of edgem-
    zs_dstwater elevation of downstream node of edgem-
    hfwater depth at edge/linkm-
    h_avaverage water depthm-
    dlriver lengthm-
    dl_at_linkriver length at edge/linkm-
    widthriver widthm-
    width_at_linkriver width at edge/linkm-
    aflow area at edge/linkm$^2$-
    rhydraulic radius at edge/linkm-
    volumeriver volumem$^3$-
    errorerror volumem$^3$-
    inwaterlateral inflowm$^3$ s$^{-1}$-
    inflowexternal inflow (abstraction/supply/demand)m$^3$ s$^{-1}$0.0
    abstractionabstraction (computed as part of water demand and allocation)m$^3$ s$^{-1}$0.0
    inflow_wbinflow waterbody (lake or reservoir model) from land partm$^3$ s$^{-1}$0.0
    bankfull_volumebankfull volumem$^3$-
    bankfull_depthbankfull depthm-
    froude_limitif true a check is performed if froude number > 1.0 (algorithm is modified)--
    reservoir_indexriver cell index with a reservoir--
    lake_indexriver cell index with a lake--
    waterbodywater body cells (reservoir or lake)--
    reservoiran array of reservoir models SimpleReservoir--
    lakean array of lake models Lake--
    allocationoptional water allocation of type AllocationRiver--
    floodplainoptional 1D floodplain routing FloodPlain--

    1D floodplain

    The Table below shows the parameters (fields) of struct FloodPlain (part of struct ShallowWaterRiver), including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river.floodplain], to map the internal model parameter to the external netCDF variable. The input parameter n (listed under [input.lateral.river.floodplain]) is not equal to the internal model parameter mannings_n, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    profileFloodplain profile FloodPlainProfile
    mannings_n (n)Manning's roughness for the floodplains m$^{-\frac{1}{3}}$0.072
    mannings_n_sqManning's roughness squared at edge/link(s m$^{-\frac{1}{3}}$)$^2$-
    volumeflood volumem$^3$-
    hflood depthm-
    h_avaverage flood depthm-
    errorerror volumem$^3$
    aflow area at edge/linkm$^2$-
    rhydraulic radius at edge/linkm-
    hfflood depth at edge/linkm-
    zb_maxmaximum bankfull elevation at edgem-
    q0discharge at previous time stepm$^3$ s$^{-1}$-
    qdischargem$^3$ s$^{-1}$-
    q_avaverage dischargem$^3$ s$^{-1}$-
    hf_indexindex with hf above depth threshold--

    The floodplain profile FloodPlainProfile contains the following parameters:

    parameterdescriptionunitdefault
    depth (flood_depth)flood depthsm-
    volumecumulative flood volume (per flood depth)m$^3$-
    widthcumulative floodplain width (per flood depth)m-
    acumulative floodplain flow area (per flood depth)m$^2$-
    pcumulative floodplain wetted perimeter (per flood depth)m-

    The floodplain volumes (per flood depth interval) can be set as follows through the TOML file:

    [input.lateral.river.floodplain]
    +volume = "floodplain_volume"

    The input parameter flood_depth (dimension of floodplain volume) is not equal to the internal model parameter depth, and is listed in the Table below between parentheses.

    Overland flow

    The Table below shows the parameters (fields) of struct ShallowWaterLand, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.land], to map the internal model parameter to the external netCDF variable.

    The mannings roughness (for the computation of mannings_n_sq) should be provided as follows in the TOML file:

    [input.lateral.land]
    +n = "n_land" # mannings roughness

    The input parameter elevation (listed under [input.lateral.land]) is not equal to the internal model parameter z, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    nnumber of cells--
    xlcell length x directionm-
    ylcell length y directionm-
    xwidtheffective flow width x direction (floodplain)m-
    ywidtheffective flow width y direction (floodplain)m-
    gacceleration due to gravitym s$^{-2}$-
    thetaweighting factor (de Almeida et al., 2012)-0.8
    alphastability coefficient (Bates et al., 2010)-0.7
    h_threshdepth threshold for calculating flowm0.001
    dtmodel time steps-
    qy0flow in y direction at previous time stepm$^3$ s$^{-1}$-
    qx0flow in x direction at previous time stepm$^3$ s$^{-1}$-
    qxflow in x directionm$^3$ s$^{-1}$-
    qyflow in y directionm$^3$ s$^{-1}$-
    zx_maxmaximum cell elevation (x direction)m-
    zy_maxmaximum cell elevation (y direction)m-
    mannings_n_sqManning's roughness squareds m$^{-\frac{1}{3}}$based on 0.072
    volumetotal volume of cell (including river volume for river cells)m$^3$-
    errorerror volumem$^3$-
    runoffrunoff from hydrological modelm$^3$ s$^{-1}$-
    hwater depth of cellm-
    z (elevation)elevation of cellm-
    froude_limitif true a check is performed if froude number > 1.0 (algorithm is modified)--
    rivercellsriver cells--
    h_avaverage water depthm-

    Water allocation river

    The Table below shows the parameters (fields) of struct AllocationRiver, used when water demand and allocation is computed (optional), including a description of these parameters, the unit, and default value if applicable.

    parameterdescriptionunitdefault
    act_surfacewater_abstactual surface water abstractionmm Δt⁻¹-
    act_surfacewater_abst_volactual surface water abstractionm$^3$ Δt⁻¹-
    available_surfacewateravailable surface waterm$^3$-
    nonirri_returnflowreturn flow from non-irrigation (industry, domestic and livestock)mm Δt⁻¹-

    Groundwater flow

    Confined aquifer

    The Table below shows the parameters (fields) of struct ConfinedAquifer, including a description of these parameters, the unit, and default value if applicable. Struct ConfinedAquifer is not (yet) part of a wflow model.

    parameterdescriptionunitdefault
    khorizontal conductivitym d$^{-1}$s-
    storativitystorativitym m$^{-1}$-
    specific_storagespecific storagem$^{-1}$-
    toptop groundwater layersm-
    bottombottom groundwater layersm-
    areacell aream$^2$-
    headgroundwater headm-
    conductanceconductancem$^2$ d$^{-1}$-

    Unconfined aquifer

    The Table below shows the parameters (fields) of struct UnconfinedAquifer, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.subsurface], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.lateral.subsurface] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter. The top parameter is provided by the external parameter altitude as part of the static input data and set as follows through the TOML file:

    [input]
    +# these are not directly part of the model
    +altitude = "wflow_dem"

    The input parameter conductivity (listed under [input.lateral.subsurface]) is not equal to the internal model parameter kh_0, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    kh_0 (conductivity)horizontal conductivitym d$^{-1}$s-
    specific_yieldspecific yieldm m$^{-1}$-
    top (altitude)top groundwater layerm-
    bottombottom groundwater layerm-
    areacell aream$^2$-
    headgroundwater headm-
    conductanceconductancem$^2$ d$^{-1}$-
    ffactor controlling the reduction of reference horizontal conductivity-3.0

    Constant Head

    The Table below shows the parameters (fields) of struct ConstantHead, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.subsurface], to map the internal model parameter to the external netCDF variable. The input parameter constant_head (listed under [input.lateral.subsurface]) is not equal to the internal model parameter head, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    head (constant_head)groundwater headm-
    indexconstant head cell index--

    Boundary conditions

    River

    The Table below shows the parameters (fields) of struct River, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.subsurface], to map the internal model parameter to the external netCDF variable. The input parameter river_bottom (listed under [input.lateral.subsurface]) is not equal to the internal model parameter bottom, and is listed in the Table below between parentheses.

    parameterdescriptionunitdefault
    stageriver stagem-
    infiltration_conductanceriver bed infiltration conductancem$^2$ day$^{-1}$ m$^2$ day$^{-1}$-
    exfiltration_conductanceriver bed exfiltration conductancem$^2$ day$^{-1}$-
    bottom (river_bottom)river bottom elevationm-
    indexriver cell index--
    fluxexchange flux (river to aquifer)m$^3$ d$^{-1}$-

    Drainage

    The Table below shows the parameters (fields) of struct Drainage, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.subsurface], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.lateral.subsurface] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter.

    parameterdescriptionunitdefault
    elevation (drain_elevation)drain elevationm-
    conductance (drain_conductance)drain conductancem$^2$ day$^{-1}$-
    index (drain)drain cell index--
    fluxexchange flux (drains to aquifer)m$^3$ day$^{-1}$-

    Recharge

    The Table below shows the parameters (fields) of struct Recharge, including a description of these parameters, the unit, and default value if applicable.

    parameterdescriptionunitdefault
    raterecharge ratem$^3$ day$^{-1}$-
    indexrecharge cell index--
    fluxrecharge fluxm$^3$ day$^{-1}$-

    Head boundary

    The Table below shows the parameters (fields) of struct HeadBoundary, including a description of these parameters, the unit, and default value if applicable.

    parameterdescriptionunitdefault
    headheadm-
    conductanceconductance of the head boundarym$^2$ day$^{-1}$-
    indexhead boundary cell index--
    fluxconductance of the head boundarym$^3$ day$^{-1}$-

    Well boundary

    The Table below shows the parameters (fields) of struct Well, including a description of these parameters, the unit, and default value if applicable.

    input parameterdescriptionunitdefault
    volumetric_ratevolumetric well ratem$^3$ d$^{-1}$-
    indexwell index--
    fluxactual well fluxm$^3$ day$^{-1}$-

    Sediment

    Overland flow

    The Table below shows the parameters (fields) of struct OverlandFlowSediment, including a description of these parameters, the unit, and default value if applicable.

    parameterdescriptionunitdefault
    nnumber of cells--
    rivcellriver cells--
    soillosstotal eroded soilton Δt$^{-1}$-
    erosclayeroded soil for particle class clayton Δt$^{-1}$-
    erossilteroded soil for particle class siltton Δt$^{-1}$-
    erossanderoded soil for particle class sandton Δt$^{-1}$-
    erossaggeroded soil for particle class small aggregateston Δt$^{-1}$-
    eroslaggeroded soil for particle class large aggregateston Δt$^{-1}$-
    TCsedtotal transport capacity of overland flowton Δt$^{-1}$-
    TCclaytransport capacity of overland flow for particle class clayton Δt$^{-1}$-
    TCsilttransport capacity of overland flow for particle class siltton Δt$^{-1}$-
    TCsandtransport capacity of overland flow for particle class sandton Δt$^{-1}$-
    TCsaggtransport capacity of overland flow for particle class small aggregateston Δt$^{-1}$-
    TClaggtransport capacity of overland flow for particle class large aggregateston Δt$^{-1}$-
    inlandsedsediment reaching the river with overland flowton Δt$^{-1}$-
    inlandclaysediment with particle class clay reaching the river with overland flowton Δt$^{-1}$-
    inlandsiltsediment with particle class silt reaching the river with overland flowton Δt$^{-1}$-
    inlandsandsediment with particle class sand reaching the river with overland flowton Δt$^{-1}$-
    inlandsaggsediment with particle class small aggregates reaching the river with overland flowton Δt$^{-1}$-
    inlandlaggsediment with particle class large aggregates reaching the river with overland flowton Δt$^{-1}$-

    River flow

    The Table below shows external parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river]. These external parameters are not part of struct RiverSediment, but used to calculate parameters of struct RiverSediment.

    external parameterdescriptionunitdefault
    reslocsreservoir location (outlet)--
    resareasreservoir coverage--
    resareareservoir area-m$^2$
    restrapeffreservoir trapping efficiency coefficient--
    lakelocslake location (outlet)--
    lakeareaslake coverage--
    lakearealake area-m$^2$

    The Table below shows the parameters (fields) of struct RiverSediment, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.lateral.river] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter. For example, internal model parameter sl is mapped as follows in the TOML file to the external netCDF variable RiverSlope:

    [input.vertical]
    +slope = "RiverSlope"
    parameterdescriptionunitdefault
    dl (length)river lengthm-
    widthriver widthm-
    sl (slope)river slope--
    rhos (rhosed)density of sedimentkg m$^{-3}1$2650.0
    dmclaymedian diameter particle size class claymm2.0
    dmsiltmedian diameter particle size class siltmm10.0
    dmsandmedian diameter particle size class sandmm200.0
    dmsaggmedian diameter particle size class small aggregatesmm30.0
    dmlaggmedian diameter particle size class large aggregatesmm500.0
    dmgravmedian diameter particle size class gravelmm2000.0
    fclayrivfraction of particle class clay--
    fsiltrivfraction of particle class silt--
    fsandrivfraction of particle class sand--
    fsaggrivfraction of particle class small aggregates--
    flaggrivfraction of particle class large aggregates--
    fgravrivfraction of particle class gravel--
    d50 (d50riv)river sediment median diametermm-
    d50engelundriver mean diametermm-
    cbagnoldBagnold c coefficient--
    ebagnoldBagnold exponent--
    nnumber of cells--
    dtmodel time steps-
    akKodatie coefficient a--
    bkKodatie coefficient b--
    ckKodatie coefficient c--
    dkKodatie coefficient d--
    kdbankbank erodibiltym$^3$ N$^{-1}$ s$^{-1}$-
    kdbedbed erodibilitym$^3$ N$^{-1}$ s$^{-1}$-
    TCrbankcritical bed bank shear stressm$^3$ N$^{-2}$-
    TCrbedcritical bed shear stressm$^3$ N$^{-2}$-
    h_rivriver water levelm-
    q_rivriver dischargem$^3$ s$^{-1}$-
    inlandclaysediment input with particle class clay from land erosiont Δt$^{-1}$-
    inlandsiltsediment input with particle class silt from land erosiont Δt$^{-1}$-
    inlandsandsediment input with particle class sand from land erosiont Δt$^{-1}$-
    inlandsaggsediment input with particle class small aggregates from land erosiont Δt$^{-1}$-
    inlandlaggsediment input with particle class large aggregates from land erosiont Δt$^{-1}$-
    inlandsedsediment input from land erosiont Δt$^{-1}$-
    sedloadsediment left in the cellt-
    clayloadsediment with particle class clay left in the cellt-
    siltloadsediment with particle class silt left in the cellt-
    sandloadsediment with particle class sand left in the cellt-
    saggloadsediment with particle class small aggregates left in the cellt-
    laggloadsediment with particle class large aggregates in the cellt-
    gravloadsediment with particle class gravel left in the cellt-
    sedstoresediment stored on the river bed after depositiont Δt$^{-1}$-
    claystoresediment with particle class clay stored on the river bed after depositiont Δt$^{-1}$-
    siltstoresediment with particle class silt stored on the river bed after depositiont Δt$^{-1}$-
    sandstoresediment with particle class sand stored on the river bed after depositiont Δt$^{-1}$-
    saggstoresediment with particle class small aggregates stored on the river bed after depositiont Δt$^{-1}$-
    laggstoresediment with particle class large aggregates stored on the river bed after depositiont Δt$^{-1}$-
    gravstoresediment with particle class gravel stored on the river bed after depositiont Δt$^{-1}$-
    outsedsediment fluxt Δt$^{-1}$-
    outclaysediment with particle class clay fluxt Δt$^{-1}$-
    outsiltsediment with particle class siltt Δt$^{-1}$-
    outsandsediment with particle class sandt Δt$^{-1}$-
    outsaggsediment with particle class small aggregatest Δt$^{-1}$-
    outlaggsediment with particle class large aggregatest Δt$^{-1}$-
    outgravsediment with particle class gravelt Δt$^{-1}$-
    Sedconctotal sediment concentration (SSconc + Bedconc)g m$^{-3}$-
    SSconcsuspended load concentrationg m$^{-3}$-
    Bedconcbed load concentrationg m$^{-3}$-
    maxsedriver transport capacityt Δt$^{-1}$-
    erodsedtotal eroded sedimentt Δt$^{-1}$-
    erodsedbankeroded bank sedimentt Δt$^{-1}$-
    erodsedbederoded bed sedimentt Δt$^{-1}$-
    depseddeposited sedimentt Δt$^{-1}$-
    insedsediment input fluxt Δt$^{-1}$-
    wbcoverwaterbody coverage--
    wblocswaterbody locations--
    wbareawaterbody aream$^2$-
    wbtrapwaterbody trapping efficiency coefficient--
    diff --git a/previews/PR490/model_docs/params_vertical/index.html b/previews/PR490/model_docs/params_vertical/index.html new file mode 100644 index 000000000..155db0838 --- /dev/null +++ b/previews/PR490/model_docs/params_vertical/index.html @@ -0,0 +1,5 @@ + +Parameters vertical concepts · Wflow.jl

    Parameters vertical concepts

    SBM

    The Table below shows the parameters (fields) of struct SBM, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.vertical] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter. For example, internal model parameter sl is mapped as follows in the TOML file to the external netCDF variable Sl:

    [input.vertical]
    +specific_leaf = "Sl"

    Different vertical hydraulic conductivity depth profiles: exponential (default), exponential_constant, layered and layered_exponential can be provided through the TOML file. Below an example for the exponential_constant profile:

    [input.vertical]
    +ksat_profile = "exponential_constant"

    For the exponential profile the input parameters kv_0 and f are used. For the exponential_constant profile kv_0 and f are used, and z_exp is required as input. For the layered profile, input parameter kv is used, and for the layered_exponential profile kv is used and z_layered is required as input.

    parameterdescriptionunitdefault
    cfmaxdegree-day factormm ᵒC$^{-1}$ Δt$^{-1}$3.75653 mm ᵒC$^{-1}$ day$^{-1}$
    ttthreshold temperature for snowfallᵒC0.0
    ttithreshold temperature interval lengthᵒC1.0
    ttmthreshold temperature for snowmeltᵒC0.0
    whcwater holding capacity as fraction of current snow pack-0.1
    w_soilsoil temperature smooth factor-0.1125
    cf_soilcontrols soil infiltration reduction factor when soil is frozen-0.038
    g_ttthreshold temperature for snowfall above glacierᵒC0.0
    g_cfmaxDegree-day factor for glaciermm ᵒC$^{-1}$ Δt$^{-1}$3.0 mm ᵒC$^{-1}$ day$^{-1}$
    g_sifracfraction of the snowpack on top of the glacier converted into iceΔt$^{-1}$0.001 day$^{-1}$
    glacierfracfraction covered by a glacier-0.0
    glacierstorewater within the glaciermm5500.0
    theta_ssaturated water content (porosity)-0.6
    theta_rresidual water content-0.01
    kv_0Vertical hydraulic conductivity at soil surfacemm Δt$^{-1}$3000.0 mm day$^{-1}$
    kvVertical hydraulic conductivity per soil layermm Δt$^{-1}$1000.0 mm day$^{-1}$
    fscaling parameter (controls exponential decline of kv_0)mm$^{-1}$0.001
    z_expDepth from soil surface for which exponential decline of kv_0 is validmm-
    z_layeredDepth from soil surface for which layered profile (of layered_exponential) is validmm-
    hbair entry pressure of soil (Brooks-Corey)cm-10.0
    soilthicknesssoil thicknessmm2000.0
    infiltcappathinfiltration capacity of the compacted areasmm Δt$^{-1}$10.0 mm day$^{-1}$
    infiltcapsoilsoil infiltration capacitymm Δt$^{-1}$100.0 mm day$^{-1}$
    maxleakagemaximum leakage from saturated zonemm Δt$^{-1}$0.0 mm day$^{-1}$
    cBrooks-Corey power coefficient for each soil layer-10.0
    kvfracmultiplication factor applied to kv_z (vertical flow)-1.0
    waterfracfraction of open water (excluding rivers)-0.0
    pathfracfraction of compacted area-0.01
    rootingdepthrooting depthmm750.0
    rootfractionfraction of the root length density in each soil layer--
    h1soil water pressure head h1 of the root water uptake reduction function (Feddes)cm0.0 cm
    h2soil water pressure head h2 of the root water uptake reduction function (Feddes)cm-100.0 cm
    h3_highsoil water pressure head h3_high of the root water uptake reduction function (Feddes)cm-400.0 cm
    h3_lowsoil water pressure head h3_low of the root water uptake reduction function (Feddes)cm-1000.0 cm
    h4soil water pressure head h4 of the root water uptake reduction function (Feddes)cm-15849.0 cm
    alpha_h1root water uptake reduction at soil water pressure head h1 (0.0 or 1.0)-1.0
    rootdistparcontrols how roots are linked to water table--500.0
    cap_hmaxwater depth beyond which capillary flux ceasesmm2000.0
    cap_ncoefficient controlling capillary rise-2.0
    kccrop coefficient Kc-1.0
    sl (specific_leaf)specific leaf storagemm-
    swood (storage_wood)storage woody part of vegetationmm-
    kextextinction coefficient (to calculate canopy gap fraction)--
    cmaxmaximum canopy storagemm1.0
    e_r (eoverr)Gash interception model parameter-0.1
    canopygapfractioncanopy gap fraction-0.1
    dtmodel time steps-
    maxlayersmaximum number of soil layers--
    nnumber of grid cells--
    nlayersnumber of soil layers--
    n_unsatlayersnumber of unsaturated soil layers--
    nlayers_kvnumber of soil layers with vertical hydraulic conductivity value kv--
    riverfracfraction of river--
    act_thicklthickness of soil layersmm-
    sumlayerscumulative sum of soil layers thickness, starting at soil surfacemm-
    stemflowstemflowmm Δt$^{-1}$-
    throughfallthroughfallmm Δt$^{-1}$-
    ustorelayerdepthamount of water in the unsaturated store, per layermm-
    satwaterdepthsaturated storemm-
    zipseudo-water table depth (top of the saturated zone)mm-
    soilwatercapacitysoilwater capacitymm-
    canopystoragecanopy storagemm-
    precipitationprecipitationmm Δt$^{-1}$-
    temperaturetemperatureᵒC-
    potential_evaporationpotential reference evapotranspirationmm Δt$^{-1}$-
    pottransinterception subtracted from potential evapotranspirationmm Δt$^{-1}$-
    transpirationtranspirationmm Δt$^{-1}$-
    ae_ustoreactual evaporation from unsaturated storemm Δt$^{-1}$-
    interceptioninterception loss by evaporationmm Δt$^{-1}$-
    soilevaptotal soil evaporation from unsaturated and saturated storemm Δt$^{-1}$-
    soilevapsatsoil evaporation from saturated storemm Δt$^{-1}$-
    actcapfluxactual capillary risemm Δt$^{-1}$-
    actevapsatactual transpiration from saturated storemm Δt$^{-1}$-
    actevaptotal actual evapotranspirationmm Δt$^{-1}$-
    runoff_riverrunoff from river based on riverfracmm Δt$^{-1}$-
    runoff_landrunoff from land based on waterfracmm Δt$^{-1}$-
    ae_openw_lactual evaporation from open water (land)mm Δt$^{-1}$-
    ae_openw_ractual evaporation from rivermm Δt$^{-1}$-
    net_runoff_rivernet runoff from river (runoff_river - ae_openw_r)mm Δt$^{-1}$-
    avail_forinfiltwater available for infiltrationmm Δt$^{-1}$-
    actinfiltactual infiltration into the unsaturated zonemm Δt$^{-1}$-
    actinfiltsoilactual infiltration into non-compacted fractionmm Δt$^{-1}$-
    actinfiltpathactual infiltration into compacted fractionmm Δt$^{-1}$-
    infiltsoilpathinfiltration into the unsaturated zonemm Δt$^{-1}$-
    infiltexcessinfiltration excess watermm Δt$^{-1}$-
    excesswaterwater that cannot infiltrate due to saturated soil (saturation excess)mm Δt$^{-1}$-
    exfiltsatwaterwater exfiltrating during saturation excess conditionsmm Δt$^{-1}$-
    exfiltustorewater exfiltrating from unsaturated store because of change in water tablemm Δt$^{-1}$-
    excesswatersoilexcess water for non-compacted fractionmm Δt$^{-1}$-
    excesswaterpathexcess water for compacted fractionmm Δt$^{-1}$-
    runofftotal surface runoff from infiltration and saturation excessmm Δt$^{-1}$-
    net_runoffnet surface runoff (runoff - ae_openw_l)mm Δt$^{-1}$-
    vwcvolumetric water content per soil layer (including theta_r and saturated zone)--
    vwc_percvolumetric water content per soil layer (including theta_r and saturated zone)%-
    rootstoreroot water storage in unsaturated and saturated zone (excluding theta_r)mm-
    vwc_rootvolumetric water content in root zone (including theta_r and saturated zone)--
    vwc_percrootvolumetric water content in root zone (including theta_r and saturated zone)%-
    ustoredepthtotal amount of available water in the unsaturated zonemm-
    transferdownward flux from unsaturated to saturated zonemm Δt$^{-1}$-
    rechargenet recharge to saturated zonemm Δt$^{-1}$-
    actleakageactual leakage from saturated storemm Δt$^{-1}$-
    snowsnow storagemm-
    snowwaterliquid water content in the snow packmm-
    rainfallplusmeltsnowmelt + precipitation as rainfallmm Δt$^{-1}$-
    tsoiltop soil temperatureᵒC-
    leaf_area_indexleaf area indexm$^2$ m${-2}$-
    waterlevel_landwater level landmm-
    waterlevel_riverwater level rivermm-
    total_storagetotal water storage (excluding floodplains, lakes and reservoirs)mm-
    paddyoptional paddy (rice) fields of type Paddy (water demand and irrigation)--
    nonpaddyoptional non-paddy fields of type NonPaddy (water demand and irrigation)--
    domesticoptional domestic water demand of type NonIrrigationDemand--
    livestockoptional livestock water demand of type NonIrrigationDemand--
    industryoptional industry water demand of type NonIrrigationDemand--
    allocationoptional water allocation of type AllocationLand--

    HBV

    The Table below shows the parameters (fields) of struct HBV, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable.

    parameterdescriptionunitdefault
    cfmaxdegree-day factormm ᵒC$^{-1}$ Δt$^{-1}$3.75653 mm ᵒC$^{-1}$ day$^{-1}$
    ttthreshold temperature for snowfallᵒC-1.41934
    ttithreshold temperature interval lengthᵒC1.0
    ttmthreshold temperature for snowmeltᵒC-1.41934
    whcwater holding capacity as fraction of current snow pack-0.1
    g_ttthreshold temperature for snowfall above glacierᵒC0.0
    g_cfmaxDegree-day factor for glaciermm ᵒC$^{-1}$ Δt$^{-1}$3.0 mm ᵒC$^{-1}$ day$^{-1}$
    g_sifracfraction of the snowpack on top of the glacier converted into iceΔt$^{-1}$0.001 day$^{-1}$
    glacierfracfraction covered by a glacier-0.0
    glacierstorewater within the glaciermm5500.0
    fcfield capacitymm260.0
    betaseepageexponent in soil runoff generation equation-1.8
    lpfraction of field capacity below which actual evaporation=potential evaporation-0.53
    k4recession constant baseflowΔt$^-1$0.02307 day$^{-1}$
    kquickflowrecession constant upper reservoirΔt$^-1$0.09880 day$^{-1}$
    suzLevel over which k0 is usedmm100.0
    k0recession constant upper reservoirΔt$^-1$0.30 day$^{-1}$
    khqrecession rate at flow hqΔt$^-1$0.09880 day$^{-1}$
    hqhigh flow rate hq for which recession rate of upper reservoir is knownmm Δt$^-1$3.27 mm day$^{-1}$
    alphanlmeasure of non-linearity of upper reservoir-1.1
    percpercolation from upper to lower zonemm Δt$^-1$0.4 mm day$^{-1}$
    cfrrefreezing efficiency constant in refreezing of freewater in snow-0.05
    pcorrcorrection factor for precipitation-1.0
    rfcfcorrection factor for rainfall-1.0
    sfcfcorrection factor for snowfall-1.0
    cfluxmaximum capillary rise from runoff response routine to soil moisture routinemm Δt$^-1$2.0 mm day$^{-1}$
    icfmaximum interception storage (in forested and non-forested areas)mm2.0
    cevpfcorrection factor for potential evaporation-1.0
    epfexponent of correction factor for evaporation on days with precipitationmm$^{-1}$1.0
    ecorrevaporation correction-1.0
    precipitationprecipitationmm Δt$^-1$-
    temperaturetemperatureᵒC-
    potential_evaporationpotential evapotranspirationmm Δt$^-1$-
    potsoilevappotential soil evaporationmm Δt$^-1$-
    soilevapsoil evaporationmm Δt$^-1$-
    intevapevaporation from interception storagemm Δt$^-1$-
    actevapactual evapotranspiration (intevap + soilevap)mm Δt$^-1$-
    interceptionstorageactual interception storagemm-
    snowwateravailable free water in snowmm-
    snowsnow packmm-
    rainfallplusmeltsnow melt + precipitation as rainfallmm Δt$^-1$-
    soilmoistureactual soil moisturemm-
    directrunoffdirect runoff to upper zonemm Δt$^-1$-
    hbv_seepagerecharge to upper zonemm Δt$^-1$-
    in_upperzonewater inflow into upper zonemm Δt$^-1$-
    upperzonestoragewater content of the upper zonemm-
    quickflowspecific runoff (quickflow part)mm Δt$^-1$-
    real_quickflowspecific runoff (quickflow), if K upper zone is precalculatedmm Δt$^-1$-
    percolationactual percolation to the lower zonemm Δt$^-1$-
    capfluxcapillary risemm Δt$^-1$-
    lowerzonestoragewater content of the lower zonemm-
    baseflowspecific runoff (baseflow part) per cellmm Δt$^-1$-
    runofftotal specific runoff per cellmm Δt$^-1$-

    FLEXtopo

    The Table below shows the parameters (fields) of struct FLEXTOPO, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable.

    parameterdescriptionunitdefault
    cfmaxdegree-day factormm ᵒC$^{-1}$ Δt$^{-1}$3.75653 mm ᵒC$^{-1}$ day$^{-1}$
    ttthreshold temperature for snowfallᵒC-1.41934
    ttithreshold temperature interval lengthᵒC1.0
    ttmthreshold temperature for snowmeltᵒC-1.41934
    whcwater holding capacity as fraction of current snow pack-0.1
    cfrrefreezing efficiency constant in refreezing of freewater in snow-0.05
    g_ttthreshold temperature for snowfall above glacierᵒC0.0
    g_cfmaxDegree-day factor for glaciermm ᵒC$^{-1}$ Δt$^{-1}$3.0 mm ᵒC$^{-1}$ day$^{-1}$
    g_sifracfraction of the snowpack on top of the glacier converted into iceΔt$^{-1}$0.001 day$^{-1}$
    glacierfracfraction covered by a glacier-0.0
    glacierstorewater within the glaciermm5500.0
    ecorrevaporation correction-1.0
    pcorrcorrection factor for precipitation-1.0
    rfcfcorrection factor for rainfall-1.0
    sfcfcorrection factor for snowfall-1.0
    imaxmaximum interception storage ($I_\mathrm{max}$)mm3.0
    shmaxmaximum horton ponding storage capacity ($S_\mathrm{Hmax}$)mm30.0
    srmaxmaximum root zone storage capacity ($S_\mathrm{Rmax}$)mm260.0
    betaexponent in soil runoff generation equation-0.3
    lpfraction of root zone capacity below which actual evaporation=potential evaporation ($L_\mathrm{P}$)-0.3
    ksrecession constant slow groundwater storage ($K_\mathrm{S}$)Δt$^-1$0.006 day$^{-1}$
    kfrecession constant fast storage ($K_\mathrm{F}$)Δt$^-1$0.1 day$^{-1}$
    khfrecession constant horton runoff storage ($K_\mathrm{Hf}$)Δt$^-1$0.5 day$^{-1}$
    alfameasure of non-linearity of upper reservoir ($\alpha$)-1.0
    percmaximum percolation flux from root zone to slow storage ($Q_\mathrm{perc,max}$)mm Δt$^-1$0.30 mm day$^{-1}$
    capmaximum capillary rise from slow storage to root zone ($Q_\mathrm{cap,max}$)mm Δt$^-1$0.20 mm day$^{-1}$
    dssplitter parameter determining fraction of root zone outflow to slow storage ($d_\mathrm{s}$)-0.2
    shminminimum storage capacity in horton ponding (relative to $S_\mathrm{Hmax}$) ($S_\mathrm{Hmin}$)[-]0.2
    facc0maximum modelled accumulated frost resulting in shmin ($F_\mathrm{acc,fr0}$)[ᵒC Δt]-3.0
    facc1minimum modelled accumulated frost resulting in shmin ($F_\mathrm{acc,fr1}$)[ᵒC Δt]0.0
    fdecexponent for the decline of infiltration capacity ($F_\mathrm{dec}$)[-]0.2
    fmaxmaximum infiltration capacity from horton ponding ($F_\mathrm{max}$)[mm Δt$^-1$]2.0
    kmfmelt coefficient of frozen topsoil ($K_\mathrm{mf}$)[-]1.0
    hrufracfraction of class within cell ($F_\mathrm{hrufrac}$)-1/length(classes)
    precipitationprecipitationmm Δt$^-1$-
    temperaturetemperatureᵒC-
    potential_evaporationpotential evapotranspirationmm Δt$^-1$-
    precipcorrcorrected precipitationmm Δt$^-1$-
    epotcorrcorrected potential evaporationmm Δt$^-1$-
    snowsnow water ($S_\mathrm{W}$)mm-
    snowwateravailable free water in snowmm-
    interceptionstorageinterception storage ($S_\mathrm{I}$)mm-
    interceptionstorage_maverage interception storage over classes ($S_\mathrm{I}$)mm-
    hortonpondingstoragehorton ponding storage ($S_\mathrm{Hp}$)mm-
    hortonpondingstorage_maverage horton ponding storage over classes ($S_\mathrm{Hp}$)mm-
    hortonrunoffstoragehorton runoff storage ($S_\mathrm{Hf}$)mm-
    hortonrunoffstorage_maverage horton runoff storage over classes ($S_\mathrm{Hf}$)mm-
    rootzonestorageroot zone storage ($S_\mathrm{R}$)mm-
    rootzonestorage_maverage root zone storage over classes ($S_\mathrm{R}$)mm-
    faststoragefast storage ($S_\mathrm{F}$)mm-
    faststorage_maverage fast storage over classes ($S_\mathrm{F}$)mm-
    slowstorageslow storage ($S_\mathrm{S}$)mm-
    potsoilevappotential soil evaporation ($E_\mathrm{P}$)mm Δt$^-1$-
    soilevapsoil evaporationmm Δt$^-1$-
    intevapevaporation from interception storage ($E_\mathrm{I}$)mm Δt$^-1$-
    intevap_maverage evaporation from interception storage over classes ($E_\mathrm{I}$)mm Δt$^-1$-
    hortonevapevaporation from horton ponding storage ($E_\mathrm{H}$)mm Δt$^-1$-
    hortonevap_maverage evaporation from horton ponding storage over classes ($E_\mathrm{H}$)mm Δt$^-1$-
    rootevapevaporation from root zone storage ($E_\mathrm{R}$)mm Δt$^-1$-
    rootevap_maverage evaporation from root zone storage over classes ($E_\mathrm{R}$)mm Δt$^-1$-
    actevapactual evapotranspiration (intevap + hortonevap + rootevap) ($E_\mathrm{A}$)mm Δt$^-1$-
    actevap_maverage actual evapotranspiration (intevap + hortonevap + rootevap) over classes ($E_\mathrm{A}$)mm Δt$^-1$-
    precipeffectiveEffective precipitation ($P_\mathrm{E}$)mm Δt$^-1$-
    rainfallplusmeltsnow melt + precipitation as rainfall ($P_\mathrm{M} + P_\mathrm{R}$)mm Δt$^-1$-
    snowmeltsnowfallmm Δt$^-1$-
    snowfallsnowfallmm Δt$^-1$-
    faccmodeled accumulated frostᵒC Δt-
    qhortonpondFlux from the hortonian ponding storage to the hortonian runoff storage ($Q_\mathrm{H}$)mm Δt$^-1$-
    qhortonrootzoneFlux from the hortonian ponding storage to the root zone storage ($Q_\mathrm{HR}$)mm Δt$^-1$-
    qhortonrunFlux from the hortonian runoff storage ($Q_\mathrm{Hf}$)mm Δt$^-1$-
    qrootzoneFlux from the root zone storage ($Q_\mathrm{R}$)mm Δt$^-1$-
    qrootzonefastPref. recharge to fast storage ($Q_\mathrm{RF}$)mm Δt$^-1$-
    qrootzoneslow_mPref. recharge to slow storage sum classes ($Q_\mathrm{RS}$)mm Δt$^-1$-
    qcapillaryCapillary flux from the slow to the root-zone storage ($Q_\mathrm{cap}$)mm Δt$^-1$-
    qcapillary_mCapillary flux from the slow to the root-zone storage sum classes ($Q_\mathrm{cap}$)mm Δt$^-1$-
    qpercolationPercolation flux from the root-zone to the slow storage ($Q_\mathrm{perc}$)mm Δt$^-1$-
    qpercolation_mPercolation flux from the root-zone to the slow storage sum classes ($Q_\mathrm{perc}$)mm Δt$^-1$-
    qfastrunoff from fast storage ($Q_\mathrm{F}$)mm Δt$^-1$-
    qfast_totsum of fast runoff (from fast and horton runoff storages) over classesmm Δt$^-1$-
    qslowrunoff from slow storage ($Q_\mathrm{S}$)mm Δt$^-1$-
    runofftotal specific runoff per cell (qslow + qfast_tot) ($Q$)mm Δt$^-1$-
    wb_tottotal water balancemm Δt$^-1$-

    Sediment

    The Table below shows external parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.vertical]. These external parameters are not part of struct LandSediment, but used to calculate parameters of struct LandSediment.

    external parameterdescriptionunitdefault
    pclaypercentage clay%0.1
    psiltpercentage silt%0.1
    resareasreservoir coverage--
    lakeareaslake coverage--

    The Table below shows the parameters (fields) of struct LandSediment, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.vertical] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter. For example, internal model parameter sl is mapped as follows in the TOML file to the external netCDF variable Sl:

    [input.vertical]
    +specific_leaf = "Sl"
    parameterdescriptionunitdefault
    canopyheightcanopy heightm3.0
    eroskcoefficient for EUROSEM rainfall erosion-0.6
    erossplexponent for EUROSEM rainfall erosion-2.0
    erosovcoefficient for ANSWERS overland flow erosion-0.9
    pathfracfraction of impervious area per grid cell-0.01
    slopeland slope-0.01
    usleCUSLE crop management factor-0.01
    usleKUSLE soil erodibility factor-0.1
    sl (specific_leaf)specific leaf storagemm-
    swood (storage_wood)storage woody part of vegetationmm-
    kextextinction coefficient (to calculate canopy gap fraction)--
    cmaxmaximum canopy storagemm1.0
    canopygapfractioncanopy gap fraction-0.1
    dmclaymedian diameter particle size class clayµm2.0
    dmsiltmedian diameter particle size class siltµm10.0
    dmsandmedian diameter particle size class sandµm200.0
    dmsaggmedian diameter particle size class small aggregatesµm30.0
    dmlaggmedian diameter particle size class large aggregatesµm500.0
    rhos (rhosed)density of sedimentkg m$^{-3}1$2650.0
    nnumber of cells--
    yllength of cells in y directionm-
    xllength of cells in x directionm-
    riverfracfraction of river--
    wbcoverwaterbody coverage--
    h_landdepth of overland flowm-
    interceptioncanopy interceptionmm Δt$^{-1}$-
    precipitationprecipitationmm Δt$^{-1}$-
    q_landoverland flowm$^3$ s$^{-1}$-
    sedsplsediment eroded by rainfallton Δt$^{-1}$-
    sedovsediment eroded by overland flowton Δt$^{-1}$-
    soillosstotal eroded soilton Δt$^{-1}$-
    erosclayeroded soil for particle class clayton Δt$^{-1}$-
    erossilteroded soil for particle class siltton Δt$^{-1}$-
    erossanderoded soil for particle class sandton Δt$^{-1}$-
    erossaggeroded soil for particle class small aggregateston Δt$^{-1}$-
    eroslaggeroded soil for particle class large aggregateston Δt$^{-1}$-
    leaf_area_indexleaf area indexm$^2$ m$^{-2}$-
    dldrain lengthm-
    dwflow widthm-
    cGoversGovers transport capacity coefficient--
    nGoversGovers transport capacity coefficient--
    D50median particle diameter of the topsoilmm-
    fclayfraction of particle class clay--
    fsiltfraction of particle class silt--
    fsandfraction of particle class sand--
    fsaggfraction of particle class small aggregates--
    flaggfraction of particle class large aggregates--
    rivcellriver cells--
    TCsedtotal transport capacity of overland flowton Δt$^{-1}$-
    TCclaytransport capacity of overland flow for particle class clayton Δt$^{-1}$-
    TCsilttransport capacity of overland flow for particle class siltton Δt$^{-1}$-
    TCsandtransport capacity of overland flow for particle class sandton Δt$^{-1}$-
    TCsaggtransport capacity of overland flow for particle class small aggregateston Δt$^{-1}$-
    TClaggtransport capacity of overland flow for particle class large aggregateston Δt$^{-1}$-

    Water demand and allocation

    Paddy

    The Table below shows the parameters (fields) of struct Paddy, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical.paddy], to map the internal model parameter to the external netCDF variable.

    parameterdescriptionunitdefault
    demand_grossirrigation gross demandmm Δt$^{-1}$-
    irrigation_efficiencyirrigation efficiency--
    maximum_irrigation_ratemaximum irrigation ratemm Δt$^{-1}$25.0 mm day$^{-1}$
    irrigation_areasirrigation areas--
    irrigation_triggerirrigation on or off (boolean)--
    h_minminimum required water depth in the irrigated paddy fieldsmm20.0
    h_optoptimal water depth in the irrigated paddy fieldsmm50.0
    h_maxwater depth when paddy field starts spilling water (overflow)mm80.0
    hactual water depth in paddy fieldmm-

    Non-paddy

    The Table below shows the parameters (fields) of struct NonPaddy, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical.nonpaddy], to map the internal model parameter to the external netCDF variable.

    parameterdescriptionunitdefault
    demand_grossirrigation gross demandmm Δt$^{-1}$-
    irrigation_efficiencyirrigation efficiency--
    maximum_irrigation_ratemaximum irrigation ratemm Δt$^{-1}$25.0 mm day$^{-1}$
    irrigation_areasirrigation areas--
    irrigation_triggerirrigation on or off (boolean)--

    Non-irrigation (industry, domestic and livestock)

    The Table below shows the parameters (fields) of struct NonIrrigationDemand, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF). These parameters can be listed for the sectors industry, domestic and livestock, in the TOML configuration file under [input.vertical.industry], [input.vertical.domestic] and [input.vertical.livestock], to map the internal model parameter to the external netCDF variable.

    parameterdescriptionunitdefault
    demand_grossgross industry water demandmm Δt$^{-1}$0.0
    demand_netnet industry water demandmm Δt$^{-1}$0.0
    returnflow_fractionreturn flow fraction--
    returnflowreturn flowmm Δt$^{-1}$-

    Water allocation land

    The Table below shows the parameters (fields) of struct AllocationLand, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical.allocation], to map the internal model parameter to the external netCDF variable.

    parameterdescriptionunitdefault
    irri_demand_grossirrigation gross demandmm Δt$^{-1}$-
    nonirri_demand_grossnon-irrigation gross demandmm Δt$^{-1}$-
    total_gross_demandtotal gross demandmm Δt$^{-1}$-
    frac_sw_usedfraction surface water used-1.0
    areasallocation areas-1
    surfacewater_demanddemand from surface watermm Δt$^{-1}$-
    surfacewater_allocallocation from surface watermm Δt$^{-1}$-
    act_groundwater_abstactual groundwater abstractionmm Δt$^{-1}$-
    act_groundwater_abst_volactual groundwater abstractionm$^3$ Δt$^{-1}$-
    available_groundwateravailable groundwaterm$^3$-
    groundwater_demandgroundwater_demandmm Δt$^{-1}$-
    groundwater_allocallocation from groundwatermm Δt$^{-1}$-
    irri_allocallocated water for irrigationmm Δt$^{-1}$-
    nonirri_allocallocated water for non-irrigationmm Δt$^{-1}$-
    total_alloctotal allocated watermm Δt$^{-1}$-
    nonirri_returnflowreturn flow from non-irrigationmm Δt$^{-1}$-
    diff --git a/previews/PR490/model_docs/shared_concepts/index.html b/previews/PR490/model_docs/shared_concepts/index.html new file mode 100644 index 000000000..ec876c486 --- /dev/null +++ b/previews/PR490/model_docs/shared_concepts/index.html @@ -0,0 +1,13 @@ + +Shared processes · Wflow.jl

    Shared processes

    Snow and glaciers

    Snow modelling

    If the air temperature, $T_a$, is below a user-defined threshold tt $\SIb{}{\degree C}$ precipitation occurs as snowfall, whereas it occurs as rainfall if $T_a ≥ \mathrm{tt}$. A another parameter tti defines how precipitation can occur partly as rain or snowfall (see the figure below). If precipitation occurs as snowfall, it is added to the dry snow component within the snow pack. Otherwise it ends up in the free water reservoir, which represents the liquid water content of the snow pack. Between the two components of the snow pack, interactions take place, either through snow melt (if temperatures are above a threshold tt) or through snow refreezing (if temperatures are below threshold tt).

    The respective rates of snow melt and refreezing are:

    \[\begin{align*} + Q_m &=& \subtext{\mathrm{cf}}{max}(T_a−\mathrm{tt})\, &&T_a > \mathrm{tt} \\~\\ + Q_r &=& \subtext{\mathrm{cf}}{max} \, \mathrm{cf}_r(\mathrm{tt}−T_a) &&T_a < \mathrm{tt} +\end{align*}\]

    where $Q_m$ is the rate of snow melt, $Q_r$ is the rate of snow refreezing, and $\SIb{\subtext{\mathrm{cf}}{max}}{mm\;(\degree C)^{-1} day^{-1}}$ and $\mathrm{cf}_r$ are user defined model parameters (the melting factor and the refreezing factor respectively).

    The fraction of liquid water in the snow pack is at most equal to a user defined fraction, whc, of the water equivalent of the dry snow content. If the liquid water concentration exceeds whc, either through snow melt or incoming rainfall, the surplus water (rainfall) becomes available for infiltration into the soil:

        snowwater = snowwater - refreezing  # free water content in snow
    +    maxsnowwater = snow * whc  # max water in the snow
    +    snowwater = snowwater + snowmelt + rainfall  # add all water and potentially supersaturate the snowpack
    +    rainfall = max(snowwater - maxsnowwater, 0.0)  # rain + surplus snowwater


    snowmelt

    Snowmelt and refreezing rates as a function of temperature (for set melting and refreezing factors)

    Glacier modelling

    Glacier processes can be modelled if the snow model is enabled. For the vertical HBV concept snow modelling is not optional. Glacier modelling is very close to snow modelling and considers two main processes: glacier build-up from snow turning into firn/ice (using the HBV-light model) and glacier melt (using a temperature degree-day model).

    The definition of glacier boundaries and initial volume is defined by two parameters. The parameter glacierfrac gives the fraction of each grid cell covered by a glacier as a number between zero and one. The state parameter glacierstore gives the amount of water (in mm w.e.) within the glaciers at each grid cell. Because the glacier store (glacierstore) cannot be initialized by running the model for a couple of years, a default initial state should be supplied by adding this parameter to the input static file. The required glacier data can be prepared from available glacier datasets.

    First, a fixed fraction of the snowpack on top of the glacier is converted into ice for each timestep and added to the glacierstore using the HBV-light model (Seibert et al., 2018). This fraction g_sifrac typically ranges from $0.001$ to $0.006$.

    Then, when the snowpack on top of the glacier is almost all melted (snow cover $< \SI{10}{mm}$), glacier melt is enabled and estimated with a degree-day model. If the air temperature, $T_a$, is below a certain threshold g_tt ($\SIb{}{\degree C}$) precipitation occurs as snowfall, whereas it occurs as rainfall if $T_a ≥$ g_tt.

    With this the rate of glacier melt in mm is estimated as:

    \[Q_m = \subtext{g}{cfmax}(T_a − \subtext{g}{tt})\, ; \, T_a > \subtext{g}{tt}\]

    where $Q_m$ is the rate of glacier melt and $\SIb{\subtext{g}{cfmax}}{mm (\degree C)^{-1}day^{-1}}$ is the melting factor. Parameter g_tt can be taken as equal to the snow tt parameter. Values of the melting factor g_cfmax normally varies from one glacier to another and some values are reported in the literature. g_cfmax can also be estimated by multiplying snow cfmax by a factor between 1 and 2, to take into account the higher albedo of ice compared to snow.

    Rainfall interception

    Both the Gash and Rutter models are available to estimate rainfall interception by the vegetation. The selection of an interception model depends on the simulation timestep.

    The analytical (Gash) model

    The analytical model of rainfall interception is based on Rutter's numerical model. The simplifications that introduced allow the model to be applied on a daily basis, although a storm-based approach will yield better results in situations with more than one storm per day. The amount of water needed to completely saturate the canopy is defined as:

    \[P'=\frac{-\overline{R}S}{\overline{E}_w}\log\left[1-\frac{\overline{E}_w}{\overline{R}}(1-p-p_t)^{-1}\right]\]

    where $\overline{R}$ is the average precipitation intensity on a saturated canopy and $\overline{E}_{w}$ the average evaporation from the wet canopy and with the vegetation parameters $S$, $p$ and $p_t$ as defined previously. The model uses a series of expressions to calculate the interception loss during different phases of a storm. An analytical integration of the total evaporation and rainfall under saturated canopy conditions is then done for each storm to determine average values of $\overline{E}_{w}$ and $\overline{R}$. The total evaporation from the canopy (the total interception loss) is calculated as the sum of the components listed in the table below. Interception losses from the stems are calculated for days with $P\geq S_{t}/p_{t}$. $p_t$ and $S_t$ are small and neglected.

    Table: Formulation of the components of interception loss according to Gash:

    ComponentsInterception loss
    For $m$ small storms ($P_g<{P'}_g$)$(1-p-p_t)\sum_{j=1}^m P_{g,j}$
    Wetting up the canopy in $n$ large storms ($P_g\geq{P'}_g$)$n(1-p-p_{t}){P'}_g-nS$
    Evaporation from saturated canopy during rainfall$\overline{E}/\overline{R}\sum_{j=1}^n(P_{g,j}-{P'}_g)$
    Evaporation after rainfall ceases for $n$ large storms$nS$
    Evaporation from trunks in $q$ storms that fill the trunk storage$qS_t$
    Evaporation from trunks in $m+n-q$ storms that do not fill the trunk storage$p_t\sum_{j=1}^{m+n-q}P_{g,j}$

    In applying the analytical model, saturated conditions are assumed to occur when the hourly rainfall exceeds a certain threshold. Often a threshold of 0.5 mm/hr is used. $\overline{R}$ is calculated for all hours when the rainfall exceeds the threshold to give an estimate of the mean rainfall rate onto a saturated canopy.

    Gash (1979) has shown that in a regression of interception loss on rainfall (on a storm basis) the regression coefficient should equal to $\overline{E}_w/\overline{R}$. Assuming that neither $\overline{E}_w$ nor $\overline{R}$ vary considerably in time, $\overline{E}_w$ can be estimated in this way from $\overline{R}$ in the absence of above-canopy climatic observations. Values derived in this way generally tend to be (much) higher than those calculated with the penman-monteith equation.

    The modified rutter model

    For sub daily timesteps the interception is calculated using a simplification of the Rutter model. The simplified model is solved explicitly and does not take drainage from the canopy into account.

    Wflow.rainfall_interception_modrutFunction
    rainfall_interception_modrut(precipitation, potential_evaporation, canopystorage, canopygapfraction, cmax)

    Interception according to a modified Rutter model. The model is solved explicitly and there is no drainage below cmax.

    source

    Interception parameters from LAI

    The SBM concept can determine the interception parameters from leaf area index (LAI) climatology. In order to switch this on you must define this cyclic parameter in the TOML file, the parameter is read from path_static, as follows:

    [input]
    +path_forcing = "data/forcing-moselle.nc"
    +path_static = "data/staticmaps-moselle.nc"
    +
    +cyclic = ["vertical.leaf_area_index"]

    Furthermore these additional parameters are required:

    • Specific leaf storage (sl $\SIb{}{mm}$)
    • Storage woody part of vegetation (swood $\SIb{}{mm}$)
    • Extinction coefficient (kext $\SIb{}{-}$)

    Here it is assumed that cmax $\SIb{}{mm}$ (leaves) (canopy storage capacity for the leaves only) relates linearly with LAI (c.f. Van Dijk and Bruijnzeel 2001). This done via the sl. sl can be determined through a lookup table with land cover based on literature (Pitman 1989, Lui 1998). Next the cmax (leaves) is determined using:

    \[ + \mathrm{cmax}(\mathrm{leaves}) = \mathrm{sl} \cdot \mathrm{LAI}\]

    To get to total storage (cmax) the woody part of the vegetation also needs to be added. As for sl, the storage of the woody part swood can also be related to land cover (lookup table).

    The canopy gap fraction is determined using the extinction coefficient kext (van Dijk and Bruijnzeel 2001):

    \[ \mathrm{canopygapfraction} = \exp(-\subtext{k}{ext} \cdot \mathrm{LAI})\]

    The extinction coefficient kext can be related to land cover.

    References

    • Seibert, J., Vis, M. J. P., Kohn, I., Weiler, M., and Stahl, K., 2018, Technical note: Representing glacier geometry changes in a semi-distributed hydrological model, Hydrol. Earth Syst. Sci., 22, 2211–2224, https://doi.org/10.5194/hess-22-2211-2018.
    diff --git a/previews/PR490/model_docs/structures/index.html b/previews/PR490/model_docs/structures/index.html new file mode 100644 index 000000000..4d5b160e8 --- /dev/null +++ b/previews/PR490/model_docs/structures/index.html @@ -0,0 +1,34 @@ + +Julia structures · Wflow.jl

    Julia structures

    Model

    Below the composite type that represents all different aspects of a Wflow.Model, such as the network, parameters, clock, model type, configuration and input and output.

    struct Model{N,L,V,R,W,T}
    +    config::Config  # all configuration options
    +    network::N      # connectivity information, directed graph
    +    lateral::L      # lateral model that holds lateral state, moves along network
    +    vertical::V     # vertical model that holds vertical state, independent of each other
    +    clock::Clock    # to keep track of simulation time
    +    reader::R       # provides the model with dynamic input
    +    writer::W       # writes model output
    +    type::T         # model type
    +end

    The lateral field of the struct Model can contain different lateral concepts. For each wflow model these different lateral concepts are mapped through the use of a NamedTuple. The vertical field of the struct Model always contains one vertical concept, for example the SBM or HBV vertical concept.

    Below an example how lateral concepts are mapped for the SBM model through a NamedTuple:

    (subsurface = ssf, land = olf, river = rf)

    The subsurface part is mapped to the lateral subsurface flow kinematic wave concept, the land part is mapped the overland flow kinematic wave concept and the river part is mapped to the river flow kinematic wave concept. Knowledge of this specific mapping is required to understand and correctly set input, output and state variables in the TOML configuration file, see also Config and TOML. This mapping is described in more detail for each model in the section Models. Also the struct of each mapped concept is provided, so one can check the internal variables in the code. These structs are defined as a parametric composite type, with type parameters between curly braces after the struct name. See also the next paragraph Vertical and lateral models for a more detailed description.

    Vertical and lateral models

    The different model concepts used in wflow are defined as parametric composite types. For example the vertical SBM concept is defined as follows: struct SBM{T,N,M}. T, N and M between curly braces after the struct name refer to type parameters, for more information about type parameters you can check out Type parameters. Since these parameters can be of any type, it is possible to declare an unlimited number of composite types. The type parameters are used to set the type of struct fields, below an example with a part of the SBM struct:

    @get_units @with_kw struct SBM{T,N,M}
    +    # Model time step [s]
    +    dt::T | "s"
    +    # Maximum number of soil layers
    +    maxlayers::Int | "-"
    +    # number of cells
    +    n::Int | "-"
    +    # Number of soil layers
    +    nlayers::Vector{Int} | "-"
    +    # Number of unsaturated soil layers
    +    n_unsatlayers::Vector{Int} | "-"
    +    # Fraction of river [-]
    +    riverfrac::Vector{T} | "-"
    +    # Saturated water content (porosity) [mm mm⁻¹]
    +    theta_s::Vector{T} | "mm mm-1"
    +    # Residual water content [mm mm⁻¹]
    +    theta_r::Vector{T} | "mm mm-1"
    +    # Vertical hydraulic conductivity [mm Δt⁻¹] at soil surface
    +    kv_0::Vector{T} | "mm dt-1"
    +    # Muliplication factor [-] applied to kv_z (vertical flow)
    +    kvfrac::Vector{SVector{N,T}} | "-"

    The type parameter T is used in wflow as a subtype of AbstractFloat, allowing to store fields with a certain floating point precision (e.g. Float64 or Float32) in a flexible way. N refers to the maximum number of soil layers of the SBM soil column, and M refers to the maximum number of soil layers + 1. See also part of the following instance of SBM:

    sbm = SBM{Float,maxlayers,maxlayers + 1}(
    +    dt = tosecond(dt),
    +    maxlayers = maxlayers,
    +    n = n,

    For the other model concepts, we refer to the code to check these type parameters.

    diff --git a/previews/PR490/model_docs/vertical/flextopo/index.html b/previews/PR490/model_docs/vertical/flextopo/index.html new file mode 100644 index 000000000..388a52c38 --- /dev/null +++ b/previews/PR490/model_docs/vertical/flextopo/index.html @@ -0,0 +1,8 @@ + +FLEXTopo · Wflow.jl

    FLEXTopo

    Introduction

    This section describes the different vertical processes available as part of the vertical FLEXTopo concept. This concept is part of the wflow_flextopo model. The FLEXTopo model is a process-based model, which consists of different parallel classes connected through their groundwater storage. These classes are usually delineated from topographical data to represent the variability in hydrological processes across user-defined Hydrological Response Units (HRU). The main assumption underlying the concept, which was first introduced by Savenije (2010), is that different parts of the landscape fulfill different tasks in runoff generation and, hence, can be represented by different model structures. Commonly used classes include hillslopes, plateau and wetlands. Hillslopes are steep areas in a catchment and are generally forested. The dominant runoff process in hillslopes is assumed to be characterized by subsurface flow. Plateaus are defined as relatively flat and are relatively high above the stream, with deep groundwater levels. Depending on the specific conditions, the dominant runoff processes are groundwater recharge, quick subsurface flow and hortonian overland flow, which is especially important in agricultural areas. Saturation overland flow and capillary rise are the dominant processes on the riparian wetland class, where groundwater levels are shallow and assumed to rise quickly during an event. The strength of the concept is that the definition of classes and associated model structures is modular and flexible and not constrained by a predefined fixed model structure. The flexible approach allows to develop process-based models for different topographic, climatic, geologic and land use conditions, making use of the available data and expert knowledge. The FLEXTopo modeling approach has been applied in a lumped and distributed way in various applications across the globe (Gao et al., 2014; Euser et al., 2015; Hanus et al., 2021; Hrachowitz et al. 2021; Hulsman et al. 2021; Bouaziz et al., 2022).

    The wflow_flextopo model is set-up in a modular way, implying that the user is free to determine the number of classes and which processes and/or parameters to include or exclude for each class. For each cell in the model domain, the percentage of each class in the cell is provided by the user in the staticmaps. The most complete model structure implemented in wflow_flextopo is shown in the figure below. However, it is also possible to bypass each bucket or to deactivate processes through parameter values (see FLEXTopo configuration). It is also possible for users to contribute to the code by adding different conceptualizations for the different storages. When defining several classes, the model structures for each class are implemented in parallel, except for the common glacier, snow and groundwater processes, which are not class specific. An example of a three classes model is also shown in the Figure below.

    flextopo_julia_1class.png Schematic representation of the FLEXTopo model for a single class model including all storages and fluxes. Main parameters are denoted in red.

    flextopo_julia_3class.png Example of a three class model with different model structure configurations per class

    The descriptions below of each of the FLEXTopo model components are given for the most complete model structure with the symbols as shown in the schematic representation of the one class model in the Figure above. By bypassing storages and/or setting parameters to specific values, the model structure can be adapted to a user-defined model structure.

    Snow

    The snow model is described in Snow and glaciers.

    Glaciers

    Glacier processes are described in Snow and glaciers. Glacier modelling is enabled by specifying the following in the TOML file:

    [model]
    +glacier = true

    Correction factors for forcing data

    The $e_\mathrm{corr}$ and $p_\mathrm{corr}$ model parameters can be used to adjust the potential evaporation and precipitation, respectively.

    Interception

    After the snow module, rainfall $P_\mathrm{R}$ [mm t$^{-1}$] and snowmelt $P_\mathrm{M}$ [mm t$^{-1}$] enter the interception storage $S_\mathrm{I}$ [mm]. The maximum interception storage is defined by the $I_\mathrm{max}$ [mm] parameter for each class. Interception evaporation $E_\mathrm{I}$ [mm t$^{-1}$] occurs at potential rate $E_\mathrm{P}$ [mm t$^{-1}$] as long as there is enough water in the interception storage. Effective precipitation $P_\mathrm{E}$ [mm t$^{-1}$] flows out of the interception store when the storage capacity is exceeded. Interception evaporation is subtracted from potential evaporation to ensure total evaporation does not exceed potential evaporation.

    The following equations apply:

    \[ \mathrm{d}S_\mathrm{I}/\mathrm{d}t = (P_\mathrm{R} + P_\mathrm{M}) - E_\mathrm{I} - P_\mathrm{E}\]

    \[ P_\mathrm{E} = \mathrm{max}(0, (S_\mathrm{I} - I_\mathrm{max})/\mathrm{d}t)\]

    \[ E_\mathrm{I} = \mathrm{min}(E_\mathrm{P}, S_\mathrm{I}/\mathrm{d}t)\]

    Hortonion ponding and runoff

    Hortonian overland flow processes are represented by a combination of two storages: a horton ponding storage $S_\mathrm{Hp}$ [mm] and a runoff generating storage $S_\mathrm{Hf}$ [mm]. This conceptualization was introduced by de Boer-Euser (2017) and included in the plateau class to represent hortonian overland flow (infiltration excess overland flow) in agricultural fields. When the storage capacity of the ponding storage is exceeded, runoff $Q_\mathrm{H}$ [mm t$^{-1}$] is generated that enters the horton runoff storage. The horton runoff generating storage is included to slightly smooth the precipitation signal. However, the response time of the runoff generation storage $K_\mathrm{Hf}$ [t$^{-1}$] is very short to generate fast runoff $Q_\mathrm{Hf}$ [mm t$^{-1}$].

    Effective precipitation $P_\mathrm{E}$ [mm t$^{-1}$] from the interception module enters the horton ponding storage, which has a maximum storage capacity $S_\mathrm{Hmax}$ [mm]. When the inflow exceeds the storage capacity, direct runoff is generated $Q_\mathrm{H,direct}$ [mm t$^{-1}$] and net infiltration in the horton ponding storage is denoted as $Q_\mathrm{H,in,net}$ [mm t$^{-1}$].

    Evaporation from the horton ponding storage $E_\mathrm{H}$ [mm t$^{-1}$] is based on a simple formulation to express water stress. The equation describes how actual evaporation is linearly reduced when the relative horton ponding storage $\overline{S_\mathrm{Hp}}$ [-] is below a certain threshold $L_\mathrm{P}$ [-] parameter.

    A beta function with parameter $\beta$ [-] is used to split the net infiltrating water to storage and to runoff $Q_\mathrm{H}$ [mm t$^{-1}$], to which is added the direct runoff $Q_\mathrm{H,direct}$ [mm t$^{-1}$].

    The shape of the beta function for various values of $\beta$ [-] is shown below:

    Additionally, water infiltrates from the horton ponding storage to the root zone storage ($Q_\mathrm{HR}$ [mm t$^{-1}$]), based on a formulation using a maximum infiltration capacity $F_\mathrm{max}$ [mm t$^{-1}$] and a decay coefficient $F_\mathrm{dec}$ [-].

    The maximum storage capacity of the horton ponding storage is reduced when soils are likely to be frozen $S_\mathrm{Hmax,frost}$ [mm], i.e. during periods when the temperature is below zero for several consecutive days.

    The following equations apply for the Horton ponding storage $S_\mathrm{Hp}$ [mm]:

    \[ \mathrm{d}S_\mathrm{Hp}/\mathrm{d}t = P_\mathrm{E} - E_\mathrm{H} - Q_\mathrm{H} - Q_\mathrm{HR}\]

    The constitutive equations are:

    \[ Q_\mathrm{H,direct}=\mathrm{max}((S_\mathrm{Hp}+P_\mathrm{E}−S_\mathrm{Hmax});0.0)\]

    \[ Q_\mathrm{H,in,net} = P_\mathrm{E} − Q_\mathrm{H,direct}\]

    \[ \overline{S_\mathrm{Hp}} = S_\mathrm{Hp}/S_\mathrm{H,max}\]

    \[ E_\mathrm{H} = \mathrm{min} ( (E_\mathrm{P} - E_\mathrm{I}) \cdot \mathrm{min}(\overline{S_\mathrm{Hp}}/L_\mathrm{P},1), S_\mathrm{Hp}/\mathrm{d}t )\]

    \[ Q_\mathrm{H} = Q_\mathrm{H,in,net} \cdot (1-(1-\overline{S_\mathrm{Hp}})^\beta)\]

    \[ Q_\mathrm{HR} = F_\mathrm{max} \cdot \mathrm{exp}(-F_\mathrm{dec} \cdot \overline{S_\mathrm{Hp}})\]

    The reduction of the storage capacity of the horton ponding storage during frozen soil conditions is calculated following the equations provided by de Boer-Euser (2017):

    \[ S_\mathrm{Hmax,frost} = F_\mathrm{T} \cdot S_\mathrm{Hmax}\]

    with:

    \[F_\mathrm{T} = + \begin{cases} + S_\mathrm{Hmin} & \text{if $F_\mathrm{acc,fr} < F_\mathrm{acc,fr0}$}\\ + \frac{F_\mathrm{acc}}{F_\mathrm{acc,fr1} - F_\mathrm{acc,fr0}} - \frac{F_\mathrm{acc,fr0}}{F_\mathrm{acc,fr1} - F_\mathrm{acc,fr0}} & \text{if $ F_\mathrm{acc,fr0} \le F_\mathrm{acc,fr} \le F_\mathrm{acc,fr1}$}\\ + 1 & \text{if $F_\mathrm{acc,fr} > F_\mathrm{acc,fr,1}$} + \end{cases}\]

    where $S_\mathrm{Hmin}$ [-], $F_\mathrm{acc,fr0}$ [degree t], $F_\mathrm{acc,fr1}$ [degree t] and $K_\mathrm{mf}$ [-] are all model parameters to describe: a coefficient to reduce $S_\mathrm{Hmax}$ to a minimum storage capacity, the minimum and maximum modelled accumulated frost and a melt coefficient for the frozen topsoil, respectively.

    The following equations apply for the Horton fast runoff storage $S_\mathrm{Hf}$ [mm]:

    \[ \mathrm{d}S_\mathrm{Hf}/\mathrm{d}t = Q_\mathrm{H} - Q_\mathrm{Hf}\]

    \[ Q_\mathrm{Hf} = K_\mathrm{Hf}^{-1} \cdot S_\mathrm{Hf}\]

    Root zone soil moisture

    The incoming water from the interception and hortonian routines $Q_\mathrm{HR}$ [mm t$^{-1}$] enters the root zone storage $S_\mathrm{R}$ [mm]. The root zone storage has a maximum capacity $S_\mathrm{Rmax}$ [mm], which represents the volume of water in the unsaturated root zone, which is available to the roots of vegetation for transpiration. Abundant water which exceeds the capacity of the root zone storage cannot infiltrate and becomes directly available for runoff $Q_\mathrm{R,direct}$ [mm t$^{-1}$]. The net infiltration in the root zone storage is denoted as $Q_\mathrm{R,in,net}$ [mm t$^{-1}$].

    A simple formulation to express water stress is used to calculate evaporation $E_\mathrm{R}$ [mm t$^{-1}$] from the root zone storage. The equation describes how actual evaporation is linearly reduced when the relative root zone storage $\overline{S_\mathrm{R}}$ [-] is below a certain threshold $L_\mathrm{P}$ [-] parameter.

    Next, a beta function with parameter $\beta$ [-] describes the partitioning of incoming water to the root zone storage and to runoff $Q_\mathrm{R}$ [mm t$^{-1}$]. The water that leaves the root zone storage is partitioned into the fast storage and through preferential recharge to the slow storage, based on a splitter parameter $d_\mathrm{s}$ [-].

    Water may also leave the root zone storage through percolation to the slow groundwater $Q_\mathrm{perc}$ [mm t$^{-1}$] or enter the root zone storage from the slow groundwater through capillary rise $Q_\mathrm{cap}$ [mm t$^{-1}$], based on a maximum percolation parameter $Q_\mathrm{perc,max}$ [mm t$^{-1}$] and a maximum capillary rise flux parameter $Q_\mathrm{cap,max}$ [mm t$^{-1}$].

    The water balance equation for the root zone storage is:

    \[ \mathrm{d}S_\mathrm{R}/\mathrm{d}t = Q_\mathrm{HR} - E_\mathrm{R} - Q_\mathrm{R} - Q_\mathrm{perc} + Q_\mathrm{cap}\]

    The constitutive equations are:

    \[ Q_\mathrm{R,direct}=\mathrm{max}((S_\mathrm{R}+Q_\mathrm{HR}−S_\mathrm{Rmax});0.0)\]

    \[ Q_\mathrm{R,in,net} = Q_\mathrm{HR} − Q_\mathrm{R,direct}\]

    \[ \overline{S_\mathrm{R}} = S_\mathrm{R}/S_\mathrm{R,max}\]

    \[ E_\mathrm{R} = \mathrm{min} ( (E_\mathrm{P} - E_\mathrm{I} - E_\mathrm{H}) \cdot \mathrm{min}(\overline{S_\mathrm{R}}/L_\mathrm{P},1), S_\mathrm{R}/\mathrm{d}t )\]

    \[ Q_\mathrm{R} = Q_\mathrm{R,in,net} \cdot (1-(1-\overline{S_\mathrm{R}})^\beta)\]

    \[ Q_\mathrm{perc} = Q_\mathrm{perc,max} \cdot \overline{S_\mathrm{R}}\]

    \[ Q_\mathrm{cap} = Q_\mathrm{cap,max} \cdot (1 - \overline{S_\mathrm{R}})\]

    Fast storage and runoff

    The outflow from the root zone storage $Q_\mathrm{R}$ [mm t$^{-1}$] is split with the splitter parameter $d_\mathrm{s}$ [-] into inflow in the fast storage $Q_\mathrm{RF}$ [mm t$^{-1}$] and inflow in the slow storage $Q_\mathrm{RS}$ [mm t$^{-1}$] to represent preferential recharge. The fast runoff storage $S_\mathrm{F}$ [mm] generates fast runoff $Q_\mathrm{F}$ [mm t$^{-1}$] through a simple non-linear equation with a recession constant $K_\mathrm{F}$ [t$^{-1}$] and an exponent $\alpha$ [-].

    The following equations apply:

    \[ \mathrm{d}S_\mathrm{F}/\mathrm{d}t = Q_\mathrm{RF} - Q_\mathrm{F}\]

    \[ Q_\mathrm{RF} = Q_\mathrm{R} \cdot (1-d_\mathrm{s})\]

    \[ Q_\mathrm{F} = K_\mathrm{F}^{-1} \cdot S_\mathrm{F}^{\alpha}\]

    Common slow groundwater storage and runoff

    The slow groundwater storage $S_\mathrm{S}$ [mm] is a shared storage for all the different classes. It is filled through preferential recharge from the outflow of the root zone storage $Q_\mathrm{RS}$ [mm t$^{-1}$] and through percolation $Q_\mathrm{perc}$ [mm t$^{-1}$]. It empties through capillary rise $Q_\mathrm{cap}$ [mm t$^{-1}$] and through a linear outflow $Q_\mathrm{S}$ [mm t$^{-1}$] with recession timescale coefficient $K_\mathrm{S}$ [t$^{-1}$].

    Total streamflow $Q_\mathrm{TOT}$ [mm t$^{-1}$] is the weighted sum of the horton fast runoff and the fast runoff from the different classes based on the fraction of each class in a cell $F_\mathrm{hrufrac}$ [-] and the slow runoff, which is then routed downstream along the river network through the kinematic wave.

    \[ \mathrm{d}S_\mathrm{S}/\mathrm{d}t = Q_\mathrm{RS} + Q_\mathrm{perc} - Q_\mathrm{S} - Q_\mathrm{cap}\]

    \[ Q_\mathrm{RS} = Q_\mathrm{R} \cdot d_\mathrm{s}\]

    \[ Q_\mathrm{S} = K_\mathrm{S}^{-1} \cdot S_\mathrm{S}\]

    \[Q_\mathrm{TOT} = Q_\mathrm{S} + \sum_{class=1}^{n} (Q_\mathrm{F,class} + Q_\mathrm{Hf,class}) \cdot F_\mathrm{hrufrac,class}\]

    References

    • de Boer-Euser, T. (2017). Added value of distribution in rainfall-runoff models for the Meuse basin PhD thesis, Delft University of Technology. https://doi.org/10.4233/uuid:89a78ae9-7ffb-4260-b25d-698854210fa8

    • Bouaziz, L. J. E., Aalbers, E. E., Weerts, A. H., Hegnauer, M., Buiteveld, H., Lammersen, R., Stam, J., Sprokkereef, E., Savenije, H. H. G., and Hrachowitz, M. (2022) Ecosystem adaptation to climate change: the sensitivity of hydrological predictions to time-dynamic model parameters, Hydrol. Earth Syst. Sci., 26, 1295–1318, https://doi.org/10.5194/hess-26-1295-2022

    • Euser, T., Hrachowitz, M., Winsemius, H. C., & Savenije, H. H. G. (2015). The effect of forcing and landscape distribution on performance and consistency of model structures. Hydrological Processes, 29(17), 3727–3743. https://doi.org/10.1002/hyp.10445

    • Gao, H., Hrachowitz, M., Fenicia, F., Gharari, S., & Savenije, H. H. G. (2014). Testing the realism of a topography-driven model (FLEX-Topo) in the nested catchments of the Upper Heihe, China. Hydrology and Earth System Sciences, 18(5), 1895–1915. https://doi.org/10.5194/hess-18-1895-2014

    • Hanus, S., Hrachowitz, M., Zekollari, H., Schoups, G., Vizcaino, M., and Kaitna, R. (2021) Future changes in annual, seasonal and monthly runoff signatures in contrasting Alpine catchments in Austria, Hydrol. Earth Syst. Sci., 25, 3429–3453, https://doi.org/10.5194/hess-25-3429-2021

    • Hrachowitz, M., Stockinger, M., Coenders-Gerrits, M., van der Ent, R., Bogena, H., Lücke, A., and Stumpp, C. (2021) Reduction of vegetation-accessible water storage capacity after deforestation affects catchment travel time distributions and increases young water fractions in a headwater catchment, Hydrol. Earth Syst. Sci., 25, 4887–4915, https://doi.org/10.5194/hess-25-4887-2021

    • Hulsman, P., Savenije, H. H. G., & Hrachowitz, M. (2021). Learning from satellite observations: Increased understanding of catchment processes through stepwise model improvement. Hydrology and Earth System Sciences, 25(2), 957–982. https://doi.org/10.5194/hess-25-957-2021

    • Savenije, H. H. G. (2010). HESS opinions “topography driven conceptual modelling (FLEX-Topo).” Hydrology and Earth System Sciences, 14(12), 2681–2692. https://doi.org/10.5194/hess-14-2681-2010

    diff --git a/previews/PR490/model_docs/vertical/hbv/index.html b/previews/PR490/model_docs/vertical/hbv/index.html new file mode 100644 index 000000000..c782d5e21 --- /dev/null +++ b/previews/PR490/model_docs/vertical/hbv/index.html @@ -0,0 +1,6 @@ + +HBV · Wflow.jl

    HBV

    Introduction

    This section describes the different vertical processes available as part of the vertical HBV concept. This concept is part of the wflow_hbv model.

    Snow

    The snow model is described in Snow and glaciers.

    Glaciers

    Glacier processes are described in Snow and glaciers. Glacier modelling is enabled by specifying the following in the TOML file:

    [model]
    +glacier = true

    Potential Evaporation

    The cevpf model parameter is used to adjust the potential evaporation based on land use. In the original HBV version cevpfo is used, a factor for forest land use only.

    Interception

    For interception storage a single icf parameter is used according to the land use. In this implementation interception evaporation is subtracted to ensure total evaporation does not exceed potential evaporation. From this storage evaporation equal to the potential evaporation rate will occur as long as water is available, even if it is stored as snow. All water enters this store first, there is no concept of free throughfall (e.g. through gaps in the canopy). In the model a running water budget is kept of the interception store:

    • The available storage (icf- actual storage) is filled with the water coming from the snow routine ($Q_{in}$)
    • Any surplus water now becomes the new $Q_{in}$
    • Interception evaporation is determined as the minimum of the current interception storage and the potential evaporation

    The soil routine

    The incoming water from the snow and interception routines, $Q_{in}$, is available for infiltration in the soil routine. The soil layer has a limited capacity, fc, to hold soil water, which means if fc is exceeded the abundant water cannot infiltrate and, consequently, becomes directly available for runoff.

    \[ Q_{dr}=max((SM+Q_{in}−fc);0.0)\]

    where $Q_{dr}$ is the abundant soil water (also referred to as direct runoff) and $SM$ is the soil moisture content. Consequently, the net amount of water that infiltrates into the soil, $I_{net}$, equals:

    \[I_{net} = Q_{in} − Q_{dr}\]

    Part of the infiltrating water, $I_{net}$, will runoff through the soil layer (seepage). This runoff volume, $SP$, is related to the soil moisture content, $SM$, through the following power relation:

    \[SP = \left(\frac{SM}{fc}\right)^\beta I_{net}\]

    where $\beta$ is an empirically based parameter. Application of this equation implies that the amount of seepage water increases with increasing soil moisture content. The fraction of the infiltrating water which does not runoff, $I_{net}−SP$, is added to the available amount of soil moisture, $SM$. The $\beta$ parameter affects the amount of supply to the soil moisture reservoir that is transferred to the quick response reservoir. Values of $\beta$ vary generally between 1 and 3. Larger values of $\beta$ reduce runoff and indicate a higher absorption capacity of the soil.

    hbv-soilmoist.png

    Schematic view of the soil moisture routine

    A percentage of the soil moisture will evaporate. This percentage is related to the potential evaporation and the available amount of soil moisture:

    \[ E_a = \frac{SM}{T_m} E_p \, ; \, SM<T_m \\~\\ + E_a = E_p \, ; \, SM \geq T_m\]

    where $E_a$ is the actual evaporation, $E_p$ is the potential evaporation and $T_m$ ($\leq fc$) is a user defined threshold, above which the actual evaporation equals the potential evaporation. $T_m$ is defined as $LP * fc$ in which $LP$ is a soil dependent evaporation factor ($LP\leq 1$).

    In the original model (Bergström, 1992), a correction to $E_a$ is applied in case of interception. If $E_a$ from the soil moisture storage plus $E_i$ exceeds $ET_p−E_i$ ($E_i$ = interception evaporation) then the exceeding part is multiplied by a factor ($1-e_{red}$), where the parameter $e_{red}$ varies between 0 and 1. This correction is not present in the wflow_hbv model.

    The runoff response routine

    The volume of water which becomes available for runoff, $S_{dr}+SP$, is transferred to the runoff response routine. In this routine the runoff delay is simulated through the use of a number of linear reservoirs.

    Two linear reservoirs are defined to simulate the different runoff processes: the upper zone (generating quick runoff and interflow) and the lower zone (generating slow runoff). The available runoff water from the soil routine (i.e. direct runoff, $S_{dr}$, and seepage, $SP$) in principle ends up in the lower zone, unless the percolation threshold, $PERC$, is exceeded, in which case the redundant water ends up in the upper zone:

    \[\Delta V_{LZ}=min(PERC;(S_{dr}+SP)) \\~\\ +\Delta V_{UZ}=max(0.0;(S_{dr}+SP−PERC))\]

    where $V_{UZ}$ is the content of the upper zone, $V_{LZ}$ is the content of the lower zone.

    Capillary flow from the upper zone to the soil moisture reservoir is modeled according to:

    \[Q_{cf}=cflux \; (fc−SM)/fc\]

    where $cflux$ is the maximum capillary flux [mm day$^{-1}$].

    The upper zone generates quick runoff ($Q_q$) using:

    \[Q_q=K \, UZ^{(1+\alpha)}\]

    where $K$ is the upper zone recession coefficient, and $\alpha$ determines the amount of non-linearity. Within HBV-96, the value of $K$ is determined from three other parameters: $\alpha$, $KHQ$, and $HQ$ [mm day$^{-1}$]. The value of $HQ$ represents an outflow rate of the upper zone for which the recession rate is equal to $KHQ$. If we define $UZ_{HQ}$ to be the content of the upper zone at outflow rate $HQ$ we can write the following equation:

    \[ HQ=K \cdot UZ^{(1+\alpha)} = KHQ \cdot UZ_{HQ}\]

    If we eliminate $UZ_{HQ}$ we obtain:

    \[ HQ = K \left(\frac{HQ}{KHQ}\right)^{(1+\alpha)}\]

    Rewriting for $K$ results in:

    \[ K = KQH^{(1−\alpha)} HQ^{−\alpha}\]

    The lower zone is a linear reservoir, which means the rate of slow runoff, $Q_{LZ}$, which leaves this zone during one time step equals:

    \[Q_{LZ} = K_{LZ} \, V_{LZ}\]

    where $K_{LZ}$ is the reservoir constant.

    The upper zone is also a linear reservoir, but it is slightly more complicated than the lower zone because it is divided into two zones: a lower part in which interflow is generated and an upper part in which quick flow is generated.

    hbv-upper

    Schematic view of the upper zone

    If the total water content of the upper zone, $V_{UZ}$ is lower than a threshold $UZ1$, the upper zone only generates interflow. On the other hand, if $V_{UZ}$ exceeds $UZ1$, part of the upper zone water will runoff as quick flow:

    \[ Q_i = K_i min(UZ1;V_{uz})\\ + Q_q = K_q max((V_{UZ}−UZ1);0.0)\]

    Where $Q_i$ is the amount of generated interflow in one time step, $Q_q$ is the amount of generated quick flow in one time step and $K_i$ and $K_q$ are reservoir constants for interflow and quick flow respectively.

    The total runoff rate, $Q$, is equal to the sum of the three different runoff components:

    \[ Q = Q_{LZ}+Q_i+Q_q\]

    The runoff behavior in the runoff response routine is controlled by two threshold values $P_m$ and $UZ1$ in combination with three reservoir parameters, $K_{LZ}$, $K_i$ and $K_q$.

    In order to represent the differences in delay times between the three runoff components, the reservoir constants have to meet the following requirement:

    \[ K_{LZ}<K_i<K_q\]

    References

    • Bergström, S., 1992, The HBV model–its structure and applications, SMHI Reports RH 4, Norrköping.
    diff --git a/previews/PR490/model_docs/vertical/sbm/index.html b/previews/PR490/model_docs/vertical/sbm/index.html new file mode 100644 index 000000000..a4d5ff1f6 --- /dev/null +++ b/previews/PR490/model_docs/vertical/sbm/index.html @@ -0,0 +1,70 @@ + +SBM · Wflow.jl

    SBM

    Introduction

    The SBM vertical concept has its roots in the Topog_SBM model but has had considerable changes over time. The main differences are:

    • The unsaturated zone can be split-up in different layers
    • The addition of evapotranspiration losses
    • The addition of a capillary rise

    The sections below describe the working of the SBM vertical concept in more detail.

    Precipitation

    The division between solid and liquid precipitation (snowfall and rainfall, respectively) is performed based on the air temperature. If the temperature is below a threshold temperature (tt), precipitation will fall as snow. An interval parameter (tti) defines the range over which precipitation is partly falling as snow, and partly as rain. Snowfall is added to the snowpack, where it is subject to melting and refreezing (see the section on snow and glaciers). The amount of rainfall is subject to interception, and ultimately becomes available for evaporation and/or soil processes.

    snowfall

    Division between snow and precipitation based on the threshold temperature

    Rainfall interception

    Two different interception models are available: the analytical Gash model, and the modified Rutter model. The simulation timestep defines which interception model is used, where daily (or larger) timesteps use the Gash model, and timesteps smaller than daily use the modified Rutter model.

    The analytical (Gash) model (Gash, 1979)

    The analytical model of rainfall interception is based on Rutter's numerical model. Simplifications allow the model to be applied on a daily basis, although a storm-based approach will yield better results in situations with more than one storm per day. The amount of water needed to completely saturate the canopy is defined as:

    <!– For consistancy with the rest of the docs I replaced ln with log here, assuming log is used for the natural logarithm unless a base is specified –>

    \[P'=\frac{-\overline{R}S}{\overline{E}_{w}}\log\left[1-\frac{\overline{E}_{w}}{\overline{R}}(1-p-p_{t})^{-1}\right]\]

    where $\overline{R}$ is the average precipitation intensity on a saturated canopy and $\overline{E}_{w}$ the average evaporation from the wet canopy and with the vegetation parameters $S$, $p$ and $p_t$ as defined previously. The model uses a series of expressions to calculate the interception loss during different phases of a storm. An analytical integration of the total evaporation and rainfall under saturated canopy conditions is performed for each storm to determine average values of $\overline{E}_{w}$ and $\overline{R}$. The total evaporation from the canopy (the total interception loss) is calculated as the sum of the components listed in the table below. Interception losses from the stems are calculated for days with $P\geq S_{t}/p_{t}$. $p_t$ and $S_t$ are small and neglected.

    Table: Formulation of the components of interception loss according to Gash:

    ComponentsInterception loss
    For $m$ small storms ($P_{g}<{P'}_{g}$)$(1-p-p_{t})\sum_{j=1}^{m}P_{g,j}$
    Wetting up the canopy in $n$ large storms ($P_{g}\geq{P'}_{g}$)$n(1-p-p_{t}){P'}_{g}-nS$
    Evaporation from saturated canopy during rainfall$\overline{E}/\overline{R}\sum_{j=1}^{n}(P_{g,j}-{P'}_{g})$
    Evaporation after rainfall ceases for $n$ large storms$nS$
    Evaporation from trunks in $q$ storms that fill the trunk storage$qS_{t}$
    Evaporation from trunks in $m+n-q$ storms that do not fill the trunk storage$p_{t}\sum_{j=1}^{m+n-q}P_{g,j}$

    In applying the analytical model, saturated conditions are assumed to occur when the hourly rainfall exceeds a certain threshold. Often a threshold of 0.5 mm/hr is used. $\overline{R}$ is calculated for all hours when the rainfall exceeds the threshold to give an estimate of the mean rainfall rate onto a saturated canopy.

    Gash (1979) has shown that in a regression of interception loss on rainfall (on a storm basis) the regression coefficient should equal to $\overline{E}_w/\overline{R}$. Assuming that neither $\overline{E}_w$ nor $\overline{R}$ vary considerably in time, $\overline{E}_w$ can be estimated in this way from $\overline{R}$ in the absence of above-canopy climatic observations. Values derived in this way generally tend to be (much) higher than those calculated with the penman-monteith equation.

    The modified rutter model

    For sub daily timesteps the interception is calculated using a simplification of the Rutter model. The simplified model is solved explicitly and does not take drainage from the canopy into account. The amount of stemflow is taken as a fraction (0.1 * canopygapfraction) of the precipitation. Throughfall equals to the amount of water that cannot be stored by the canopy, plus the rainfall that is not captured by the canopy. Water can evaporate from the canopy storage, taken as the minimum between potential evaporation and the current storage. The "left-over" potential evaporation (if any) is returned as output.

    Missing docstring.

    Missing docstring for Wflow.rainfall_interception_modrut. Check Documenter's build log for details.

    Interception parameters from LAI

    The SBM concept can determine the interception parameters from leaf area index (LAI) climatology. In order to switch this on you must define this cyclic parameter in the TOML file, the parameter is read from path_static, as follows:

    [input]
    +path_forcing = "data/forcing-moselle.nc"
    +path_static = "data/staticmaps-moselle.nc"
    +
    +cyclic = ["vertical.leaf_area_index"]

    Furthermore, these additional parameters are required:

    • Specific leaf storage (sl $\SIb{}{mm}$)
    • Storage woody part of vegetation (swood $\SIb{}{mm}$)
    • Extinction coefficient (kext $\SIb{}{-}$)

    Here it is assumed that cmax $\SIb{}{mm}$ (leaves) (canopy storage capacity for the leaves only) relates linearly with LAI (c.f. Van Dijk and Bruijnzeel 2001). This is done via the sl. sl can be determined through a lookup table with land cover based on literature (Pitman 1989, Lui 1998). Next the cmax (leaves) is determined using:

    \[ c_{\max}(\mathrm{leaves}) = \mathrm{sl} \cdot \mathrm{LAI}\]

    To get to total storage (cmax) the woody part of the vegetation also needs to be added. As for sl, the storage of the woody part swood can also be related to land cover (lookup table).

    The canopy gap fraction is determined using the extinction coefficient kext (van Dijk and Bruijnzeel 2001):

    \[ \mathrm{canopygapfraction} = \exp(-\subtext{k}{ext} \cdot \mathrm{LAI})\]

    The extinction coefficient kext can be related to land cover.

    Evaporation

    The wflow_sbm model assumes the input to be potential reference evapotranspiration. A crop coefficient (kc, set to 1 by default) is used to convert the potential evapotranspiration rate of a reference crop fully covering the soil to the potential evapotranspiration rate of vegetation (natural and agricultural) fully covering the soil. The crop coefficient kc of wflow_sbm is used for a surface completely covered by vegetation, and does not include the effect of growing stages of vegetation and soil cover. These effects are handled separately through the use of the canopy gap fraction.

    It is assumed that the potential evaporation rate of intercepted water by vegetation is equal to the potential evapotranspiration rate of vegetation (fully covering the soil) multiplied by the canopy fraction. The potential evapotranspiration rate left over after interception is available for transpiration. For potential open water evaporation (river and water bodies) the potential reference evapotranspiration rate is used (multipled by the river fraction riverfrac, and open water fraction waterfrac). Also for potential soil evaporation the potential reference evapotranspiration rate is used, multiplied by the canopy gap fraction corrected by the sum of total water fraction (riverfrac and waterfrac) and the fraction covered by a glacier (glacierfrac).

    Bare soil evaporation

    If there is only one soil layer present in the wflow_sbm model, the bare soil evaporation is scaled according to the wetness of the soil layer. The fraction of bare soil is assumed to be equal to the fraction not covered by the canopy (canopygapfraction) corrected by the total water fraction. When the soil is fully saturated, evaporation is set to equal the potential reference evaporation. When the soil is not fully saturated, actual evaporation decreases linearly with decreasing soil moisture values, as indicated by the figure below.

    soil_evap

    Evaporation reduction as function of available soil moisture

    When more soil layers are present, soil evaporation is only provided from the upper soil layer, and soil evaporation is split in evaporation from the unsaturated store and evaporation from the saturated store. Water is first evaporated from the unsaturated store. The remaining potential soil evaporation can be used for evaporation from the saturated store, but only when the water table is present in the upper soil layer. Both the evaporation from the unsaturated store and the evaporation from the saturated store are limited by the minimum of the remaining potential soil evaporation and the available water in the unsaturated/saturated zone of the upper soil layer. Also for multiple soil layers, the evaporation (both unsaturated and saturated) decreases linearly with decreasing water availability.

    Transpiration

    The maximum possible root water extraction rate for each soil layer is determined by partitioning the potential transpiration rate $T_p$ based on the fraction of the total root length (rootfraction $\SIb{}{-}$) in each soil layer. A root water uptake reduction model is used to calculate a reduction coefficient as a function of soil water pressure, that may reduce the maximum possible root water extraction rate. The root water uptake reduction model is based on the concept proposed by Feddes et al. (1978). This concept defines a reduction coefficient $\SIb{\alpha}{-}$ as a function of soil water pressure ($\SIb{h}{cm}$). Four different levels of $h$ are defined: h1, h2, h3 and h4. h1 represents anoxic moisture conditions, h2 represents field capacity, h3 represents the point of critical soil moisture content (onset of drought stress), and h4 represents the wilting point. The value of h3 is a function of the potential transpiration rate, between $\SIb{1}{mm d^{-1}}$ and $\SIb{5}{mm d^{-1}}$. If $T_p \le \SIb{1}{mm d^{-1}}$, h3 is set equal to h3_low (input model parameter). If $T_p \ge \SIb{5}{mm d^{-1}}$, h3 is set equal to h3_high (input model parameter). For $T_p$ values between $\SIb{1}{mm d^{-1}}$ and $\SIb{5}{mm d^{-1}}$, the value of h3 is linearly related to $T_p$ (between h3_low and h3_high). Besides model parameters h3_high and h3_low, the critical pressure heads h1, h2 and h4 can be defined as input to the model.

    The current soil water pressure is determined following the concept defined by Brooks and Corey (1964):

    \[ \frac{\theta-\theta_r}{\theta_s-\theta_r} = \min\left\{1, \left(\frac{h_b}{h}\right)^\lambda\right\}\]

    where $\SIb{h}{cm}$ is the pressure head, $\SIb{h_b}{cm}$ is the air entry pressure head, and $\theta$, $\theta_s$, $\theta_r$ and $\lambda$ as previously defined.

    Whenever the current soil water pressure drops below h4, the root water uptake is set to zero. The root water uptake is at ideal conditions whenever the soil water pressure is above h3, with a linear transition between h3 and h4. The assumption that very wet conditions do not affect root water uptake too much is probably generally applicable to natural vegetation. For crops this assumption is not valid and in this case root water uptake above h1 should be set to zero (oxygen deficit) and between h1 and h2 root water uptake is limited. This is possible by setting the input model parameter alpha_h1 at 0 (default is 1).

    soil_rootwateruptake

    Root water uptake reduction coefficient as a function of soil water pressure

    The maximum allowed root water extraction from each soil layer in the unsaturated zone is determined based on the fraction of each soil layer in the unsaturated zone that is above the rooting depth (availcap) and the unsaturated storage usld, see conceptual figure below. This is implemented using the following code (i refers to the index of the vector that contains all active cells within the spatial model domain and k refers to the soil layer (from top to bottom) in the unsaturated zone):

        # availcap is fraction of soil layer containing roots
    +    # if `ust` is `true`, the whole unsaturated store is available for transpiration
    +    if ust
    +        availcap = usld[k] * 0.99
    +    else
    +        availcap =
    +            min(1.0, max(0.0, (sbm.rootingdepth[i] - sbm.sumlayers[i][k]) / usl[k]))
    +    end
    +    maxextr = usld[k] * availcap

    soil_unsatevap

    Conceptual overview of how maxextr depends on rooting depth and water table depth

    Note

    When whole_ust_available is set to true in the TOML file, almost the complete unsaturated storage (99%) is available for transpiration, independent of the rootingdepth.

    [model]
    +whole_ust_available = true

    The computation of transpiration from the saturated store depends on the water table depth, rooting depth, the reduction coefficient $\alpha$, the fraction of wet roots and the rootfraction below the water table. The fraction of wet roots is determined using a sigmoid fuction (see figure below). The parameter rootdistpar defines the sharpness of the transition between fully wet and fully dry roots. If the water table depth is equal to or lower than the rooting depth, the remaining potential transpiration is used based on the potential transpiration and actual transpiration in the unsaturated zone. The remaining potential transpiration is multiplied by the wet roots fraction and the reduction coefficient (and limited by the available water in saturated zone) to get the transpiration from the saturated part of the soil. If the water table depth intersects the rooting depth, the potential transpiration is multiplied by the remaining rootfraction (below the water table), wet roots fraction and the reduction coefficient (and limited by the available water in saturated zone) to get the transpiration from the saturated part of the soil. This is implemented using the following code (i refers to the index of the vector that contains all active cells within the spatial model domain):

            # transpiration from saturated store
    +        wetroots = scurve(sbm.zi[i], sbm.rootingdepth[i], Float(1.0), sbm.rootdistpar[i])
    +        alpha = rwu_reduction_feddes(
    +            Float(0.0),
    +            sbm.h1[i],
    +            sbm.h2[i],
    +            sbm.h3[i],
    +            sbm.h4[i],
    +            sbm.alpha_h1[i],
    +        )
    +        # include remaining root fraction if rooting depth is below water table zi
    +        if sbm.zi[i] >= sbm.rootingdepth[i]
    +            f_roots = wetroots
    +            restevap = sbm.pottrans[i] - actevapustore
    +        else
    +            f_roots = wetroots * (1.0 - rootfraction_unsat)
    +            restevap = sbm.pottrans[i]
    +        end
    +        actevapsat = min(restevap * f_roots * alpha, satwaterdepth)
    +        satwaterdepth = satwaterdepth - actevapsat

    soil_wetroots

    Amount of wet roots and the effect of the rootdistpar parameter

    Snow and glaciers

    The snow and glacier model is described in Snow and glaciers. Both options can be enabled by specifying the following in the TOML file:

    [model]
    +snow = true
    +glacier = true

    Soil processes

    The SBM soil water accounting scheme

    A detailed description of the Topog\_SBM model has been given by Vertessy (1999). Briefly: the soil is considered as a bucket with a certain depth ($\SIb{z_t}{mm}$), divided into a saturated store ($\SIb{S}{mm}$) and an unsaturated store ($\SIb{U}{mm}$). The top of the $S$ store forms a pseudo-water table at depth $\SIb{z_{i}}{mm}$ such that the value of $S$ at any time is given by:

    \[ S=(z_t-z_i)(\theta_s-\theta_r)\]

    where $\SIb{\theta_{s}}{-}$ and $\SIb{\theta_{r}}{-}$ are the saturated and residual soil water contents, respectively.

    The unsaturated store $U$ is subdivided into storage ($\SIb{U_s}{mm}$) and deficit ($\SIb{U_d}{m}$):

    \[ U_d=(\theta_s-\theta_r)z_i-U\\ + U_s=U-U_d\]

    The saturation deficit ($\SIb{S_d}{mm}$) for the soil profile as a whole is defined as:

    \[ S_d=(\theta_s-\theta_r)z_t-S\]

    All infiltrating water that enters the $U$ store first. The unsaturated layer can be split-up in different layers, by providing the thickness $\SIb{}{mm}$ of the layers in the TOML file. The following example specifies three layers (from top to bottom) of 100, 300 and 800 mm:

    [model]
    +thicknesslayers = [100, 300, 800]

    The code checks for each grid cell the specified layers against the soilthickness $\SIb{}{mm}$, and adds or removes (partly) layer(s) based on the soilthickness.

    <!– What was the unit t here? I replaced it by s. –> Assuming a unit head gradient, the transfer of water ($\SIb{\mathrm{st}}{mm s^{-1}}$) from a $\SIb{U}{mm}$ store layer is controlled by the saturated hydraulic conductivity $\SIb{\subtext{K}{sat}}{mm s^{-1}}$ at depth $\SIb{z}{mm}$ (bottom layer) or $\SIb{z_i}{mm}$, the effective saturation degree of the layer, and a Brooks-Corey power coefficient (parameter $c$) based on the pore size distribution index $\lambda$ (Brooks and Corey, 1964):

    \[ \mathrm{st}=\subtext{K}{sat}\left(\frac{\theta-\theta_r}{\theta_s-\theta_r}\right)^c\\~\\ + c=\frac{2+3\lambda}{\lambda}\]

    When the unsaturated layer is not split-up into different layers, it is possible to use the original Topog\_SBM vertical transfer formulation, by specifying in the TOML file:

    [model]
    +transfermethod = true

    The transfer of water from the $\SIb{U}{mm}$ store to the $\SIb{S}{mm}$ store ($\SIb{st}{mm s^{-1}}$) is in that case controlled by the saturated hydraulic conductivity $\SIb{\subtext{K}{sat}}{mm s^{-1}}$ at depth $\SIb{z_i}{mm}$ and the ratio between $\SIb{U}{mm}$ and $\SIb{S_d}{mm}$:

    \[ \mathrm{st}=\subtext{K}{sat}\frac{U_s}{S_d}\]

    Four different saturated hydraulic conductivity depth profiles (ksat_profile) are available and a ksat_profile can be specified in the TOML file as follows:

    [input.vertical]
    +ksat_profile = "exponential_constant" # optional, one of ("exponential", "exponential_constant", "layered", "layered_exponential"), default is "exponential"

    Soil measurements are often available for about the upper $\SI{1.5-2}{m}$ of the soil column to estimate the saturated hydraulic conductivity, while these measurements are often lacking for soil depths beyond $\SI{1.5-2}{m}$. These different profiles allow to extent the saturated hydraulic conductivity profile based on measurements (either an exponential fit or hydraulic conductivity value per soil layer) with an exponential or constant profile. By default, with ksat_profile "exponential", the saturated hydraulic conductivity $\SIb{\subtext{K}{sat}}{mm s^{-1}}$ declines with soil depth $\SIb{z}{mm}$ in the model according to:

    \[ \subtext{K}{sat} = K_0 e^{-fz},\]

    where $\SIb{K_0}{mm s^{-1}}$ is the saturated hydraulic conductivity at the soil surface and $\SIb{f}{mm^{-1}}$ is a scaling parameter.

    The plot below shows the relation between soil depth $z$ and saturated hydraulic conductivity $\subtext{K}{sat}$ for different values of $f$.

    <!– I see a lot of inconsistency for the unit of the saturated hydraulic conductivity. This plot states mm/day, flow.jl states m/day, and the text uses t which isn't a unit of time. Maybe I should have changed t to day instead of s above? –>

    With ksat_profile "exponential_constant", $\subtext{K}{sat}$ declines exponentially with soil depth $\SIb{z}{mm}$ until $\SIb{\subtext{z}{mm}}{mm}$ below the soil surface, and stays constant at and beyond soil depth $\subtext{z}{exp}$:

    \[ \subtext{K}{sat} = \begin{cases} + K_0e^{-fz} & \text{if $z < \subtext{z}{exp}$}\\ + K_0e^{-f\subtext{z}{exp}} & \text{if $z \ge \subtext{z}{exp}$}. + \end{cases}\]

    It is also possible to provide a $\subtext{K}{sat}$ value per soil layer by specifying ksat_profile "layered", these $\subtext{K}{sat}$ values are used directly to compute the vertical transfer of water between soil layers and to the saturated store $S$. Finally, with the ksat_profile "layered_exponential" a $\subtext{K}{sat}$ value per soil layer is used until depth $\subtext{z}{layered}$ below the soil surface, and beyond $\subtext{z}{layered}$ an exponential decline of $\subtext{K}{sat}$ (of the soil layer with bottom $\subtext{z}{layered}$) controlled by $f$ occurs. The different available ksat_profle options are schematized in the figure below where the blue line represents the $\subtext{K}{sat}$ value.

    ksat_profiles

    Overview of available ksat_profile options, for a soil column with five layers

    Infiltration

    The water available for infiltration is taken as the rainfall including meltwater. Infiltration is determined separately for the compacted and non-compacted areas, as these have different infiltration capacities. Naturally, only the water that can be stored in the soil can infiltrate. If not all water can infiltrate, this is added as excess water to the runoff routing scheme.

    <!– I am so confused by this unit t –> The infiltrating water is split in two parts, the part that falls on compacted areas and the part that falls on non-compacted areas. The maximum amount of water that can infiltrate in these areas is calculated by taking the minimum of the maximum infiltration rate (infiltcapsoil [mm t$^{-1}$] for non-compacted areas and infiltcappath [mm t$^{-1}$] for compacted areas) and the amount of water available for infiltration avail_forinfilt [mm t$^{-1}$]. The water that can actually infiltrate infiltsoilpath [mm t$^{-1}$] is calculated by taking the minimum of the total maximum infiltration rate (compacted and non-compacted areas) and the remaining storage capacity.

    Infiltration excess occurs when the infiltration capacity is smaller then the throughfall and stemflow rate. This amount of water (infiltexcess [mm t$^{-1}$]) becomes overland flow (infiltration excess overland flow). Saturation excess occurs when the (upper) soil becomes saturated and water cannot infiltrate anymore. This amount of water excesswater [mm t$^{-1}$] becomes overland flow (saturation excess overland flow).

    Infiltration in frozen soils

    If snow processes are modelled, the infiltration capacity is reduced when the soil is frozen (or near freezing point). A infiltration correction factor is defined as a S-curve with the shape as defined below. A parameter (cf_soil) defines the base factor of infiltration when the soil is frozen. The soil temperature is calculated based on the soil temperature on the previous timestep, and the temperature difference between air and soil temperature weighted with a factor (w_soil, which defaults to 0.1125).

    The near surface soil temperature is modelled using a simple equation (Wigmosta et al., 2009):

    \[T_s^t = T_s^{t-1} + w (T_a - T_s^{t-1})\]

    where $\SIb{T_s^{t}}{\degree C}$ is the near-surface soil temperature at time $t$, $\SIb{T_a}{\degree C}$ is air temperature and $\SIb{w}{-}$ is a weighting coefficient determined through calibration (default is 0.1125 for daily timesteps).

    A reduction factor (cf_soil $\SIb{}{-}$, default is 0.038) is applied to the maximum infiltration rate (infiltcapsoil and infiltcappath), when the following model settings are specified in the TOML file:

    [model]
    +soilinfreduction = true
    +snow = true

    If soilinfreduction is set to false, water is allowed to infiltrate the soil, even if the soil is frozen.

    A S-curve (see plot below) is used to make a smooth transition (a c-factor ($c$) of 8.0 is used):

    \[ b = \frac{1.0}{1.0 - \subtext{\mathrm{cf}}{soil}}\\~\\ + \mathrm{soilinfredu} = \frac{1.0}{b + \exp(-c (T_s - a))} + \subtext{\mathrm{cf}}{soil}\\~\\ + a = 0.0\\ + c = 8.0\]

    soil_frozeninfilt

    Infiltration correction factor as a function of soil temperature

    Capillary rise

    <!– More unit t –> The actual capillary rise actcapflux [mm t$^{-1}$] is determined using the following approach: first the saturated hydraulic conductivity ksat [mm t$^{-1}$] is determined at the water table $z_i$; next a potential capillary rise maxcapflux [mm t$^{-1}$] is determined from the minimum of ksat, actual transpiration actevapustore [mm t$^{-1}$] taken from the $U$ store, available water in the $S$ store (satwaterdepth $\SIb{}{mm}$) and the deficit of the $U$ store (ustorecapacity $\SIb{}{mm}$), as shown by the following code block:

        maxcapflux = max(0.0, min(ksat, actevapustore, ustorecapacity, satwaterdepth))

    Then the potential rise maxcapflux is scaled using the water table depth zi, a maximum water depth cap_hmax $\SIb{}{mm}$ beyond which capillary rise ceases and a coefficient cap_n $\SIb{}{-}$, as follows in the code block below (i refers to the index of the vector that contains all active cells within the spatial model domain):

        if sbm.zi[i] > rootingdepth
    +        capflux =
    +            maxcapflux * pow(
    +                1.0 - min(sbm.zi[i], sbm.cap_hmax[i]) / (sbm.cap_hmax[i]),
    +                sbm.cap_n[i],
    +            )
    +    else
    +        capflux = 0.0
    +    end

    If the roots reach the water table (rootingdepth $\ge$ sbm.zi), capflux is set to zero.

    Finally, the capillary rise capflux is limited by the unsaturated store deficit (one or multiple layers), calculated as follows in the code block below (i refers to the index of the vector that contains all active cells within the spatial model domain, and k refers to the layer position):

        usl[k] * (sbm.theta_s[i] - sbm.theta_r[i]) - usld[k]

    where usl $\SIb{}{mm}$ is the unsaturated layer thickness, usld is the ustorelayerdepth $\SIb{}{mm}$ (amount of water in the unsaturated layer), and $\theta_s$ and $\theta_r$ as previously defined.

    The calculation of the actual capillary rise actcapflux is as follows in the code block below (i refers to the index of the vector that contains all active cells within the spatial model domain, and k refers to the layer position):

        actcapflux = 0.0
    +    netcapflux = capflux
    +    for k = n_usl:-1:1
    +        toadd =
    +            min(netcapflux, max(usl[k] * (sbm.theta_s[i] - sbm.theta_r[i]) - usld[k], 0.0))
    +        usld = setindex(usld, usld[k] + toadd, k)
    +        netcapflux = netcapflux - toadd
    +        actcapflux = actcapflux + toadd
    +    end

    In case of multiple unsaturated layers (n_usl $>$ 1), the calculation of the actual capillary rise starts at the lowest unsaturated layer while keeping track of the remaining capillary rise netcapflux [mm t$^{-1}$].

    Leakage

    If the maxleakage $\SIb{}{mm day^{-1}}$ input model parameter is set > 0, water is lost from the saturated zone and runs out of the model.

    Open water

    Part of the water available for infiltration is diverted to the open water, based on the fractions of river and lakes of each grid cell. The amount of evaporation from open water is assumed to be equal to potential evaporation (if sufficient water is available).

    Non-irrigation

    Non-irrigation water demand and allocation computations are supported for the sectors domestic, industry and livestock. These computations can be enabled by specifying the following in the TOML file:

    [model.water_demand]
    +domestic = true
    +industry = true
    +livestock = true

    For these non-irrigation sectors the gross demand ($d_\mathrm{gross}$ [mm t$^{-1}$]) and net demand ($d_\mathrm{net}$ [mm t$^{-1}$]) are provided to the model (input through cyclic or forcing data). Gross demand represents the total demand and hence the total abstraction from surface water or groundwater when sufficient water is available. Net demand represents water consumption. The portion of total abstracted water that is not consumed is returned as surface water. The return flow fraction ($f_\mathrm{return}$ [-]) is calculated as follows:

    \[ \subtext{f}{return} = 1.0 - \frac{\subtext{d}{net}}{\subtext{d}{gross}},\]

    and used to calculate the return flow rate (water abstracted from surface water or groundwater but not consumed). For grid cells containing a river the return flow is directly returned to the river routing component, otherwise the return flow is returned to the overland flow routing component.

    Non-paddy irrigation

    Non-paddy (other crops than flooded rice) water demand and allocation computations are supported. These computations can be enabled by specifying the following in the TOML file:

    [model.water_demand]
    +nonpaddy = true

    Irrigation is applied during the growing season (when input parameter irrigation_trigger $\SIb{}{-}$ is true (or on)) and when water depletion exceeds the readily available water:

    \[ (\subtext{U}{field} - \subtext{U}{a}) \ge (\subtext{U}{field} - \subtext{U}{h3})\]

    where $\SIb{\subtext{U}{field}}{mm}$ is the unsaturated store in the root zone at field capacity (defined at a soil water pressure head of $\SI{-100}{cm}$), $\SIb{\subtext{U}{a}}{mm}$ is the actual unsaturated store in the root zone and $\SIb{\subtext{U}{h3}}{mm}$ is the unsaturated store in the root zone at the critical soil water pressure head h3, below this pressure head reduction of root water uptake starts due to drought stress. The net irrigation demand [mm t$^{-1}$] is the irrigation rate that brings the root zone back to field capacity, limited by the soil infiltration capacity [mm t$^{-1}$], assuming that farmers do not apply an irrigation rate higher than the soil infiltration capacity. To account for limited irrigation efficiency the net irrigation demand is divided by the irrigation efficiency for non-paddy crops (irrigation_efficiency $\SIb{}{-}}$, default is $1.0$), resulting in gross irrigation demand [mm t$^{-1}$]. Finally, the gross irrigation demand is limited by the maximum irrigation rate (maximum_irrigation_rate [mm t$^{-1}$], default is 25 mm d$^{-1}$). If the maximum irrigation rate is applied, irrigation continues at subsequent time steps until field capacity is reached. Irrigation is added to the SBM variable avail_forinfilt [mm t$^{-1}$], the amount of water available for infiltration.

    Paddy irrigation

    Paddy (flooded rice) water demand and allocation computations are supported. These computations can be enabled by specifying the following in the TOML file:

    [model.water_demand]
    +paddy = true

    Irrigation is applied during the growing season (when input parameter irrigation_trigger $\SIb{}{-}$ is true (or on)) and when the paddy water depth h $\SIb{}{mm}$ reaches below the minimum water depth h_min $\SIb{}{mm}$ (see also the figure below). The net irrigation demand [mm t$^{-1}$] is the irrigation rate required to reach the optimal paddy water depth h_opt $\SIb{}{mm}$, an approach similar to Xie and Cui (2011). To account for limited irrigation efficiency the net irrigation demand is divided by the irrigation efficiency for paddy fields (irrigation_efficiency $\SIb{}{-}$, default is 1.0), resulting in gross irrigation demand [mm t$^{-1}$]. Finally, the gross irrigation demand is limited by the maximum irrigation rate (maximum_irrigation_rate [mm t$^{-1}$], default is $\SIb{25}{mm d^{-1}}$). If the maximum irrigation rate is applied, irrigation continues at subsequent time steps until the optimal paddy water depth h_opt is reached. Irrigation is added to the SBM variable avail_forinfilt [mm t$^{-1}$], the amount of water available for infiltration. When the paddy water depth h exceeds h_max $\SIb{}{mm}$ runoff occurs, and this amount is added to the runoff routing scheme for overland flow. The figure below shows a typical vertical soil profile of a puddled rice soil with a muddy layer of about 15 cm (in this case represented by two soil layers of 5 cm and 10 cm thickness), a plow soil layer of 5 cm with relative low permeability (vertical hydraulic conductivity $k_v$ of about $\SI{5}{mm d^{-1}}$), and a non-puddled soil below the plow soil layer. The low vertical hydraulic conductivity of the plow soil layer can be realized by making use of the parameter kvfrac $\SIb{}{-}$, a multiplication factor applied to the vertical hydraulic conductivity at soil depth $\SIb{z}{mm}$.

    paddy_profile

    Schematic diagram of a paddy field with water balance components and soil profile

    Water withdrawal and allocation

    For the water withdrawal the total gross demand is computed (sum over the irrigation and non-irrigation water demand sectors), in case sufficient water is available the water withdrawal is equal to the total gross demand. In case of insufficient water availability, the water withdrawal is scaled down to the available water, and allocation is then proportional to the gross demand per sector (industry, domestic, livestock and irrigation). Water can be abstracted from the following sources:

    • surface water from rivers (max 80% of total available water)
    • reservoirs and lakes (max 98% of total available water)
    • groundwater (max 75% of total available water)

    The model parameter frac_sw_used (fraction surface water used, default is 1.0) determines how much water is supplied by available surface water and groundwater.

    Local

    First, surface water abstraction (excluding reservoir and lake locations) is computed to satisfy local (same grid cell) water demand. The available surface water volume is limited by a fixed scaling factor of $0.8$ to prevent rivers from completely drying out. It is assumed that the water demand cannot be satisfied completely from local surface water and groundwater. The next step is to satisfy the remaining water demand for allocation areas $\SIb{}{-}$, described in the next sub-section.

    Allocation areas

    For allocation areas the water demand $\SIb{\subtext{V}{sw, demand}}{m^3}$ and availability $\SIb{\subtext{V}{sw, availabilty}}{m^3}$ are summed (including reservoir and lake locations limited by a fixed scaling factor of $0.98$), and the total surface water abstraction is then:

    \[ \subtext{V}{sw, abstraction} = \min (\subtext{V}{sw, demand}, \subtext{V}{sw, availabilty})\]

    The fraction of available surface water that can be abstracted $\SIb{\subtext{f}{sw,abstraction}}{-}$ at the allocation area level is then:

    \[ \subtext{f}{sw, abstraction} = \frac{\subtext{V}{sw, abstraction}}{\subtext{V}{sw, available}}\]

    This fraction is applied to the remaining available surface water of each river cell (including lake and reservoir locations) to compute surface water abstraction at each river cell and to update the local surface water abstraction.

    The fraction of water demand that can be satisfied by available surface water $\SIb{\subtext{f}{sw, allocation}}{-}$ at the allocation area level is then:

    \[ \subtext{f}{sw, allocation} = \frac{\subtext{V}{sw, abstraction}}{\subtext{V}{sw, demand}}\]

    This fraction is applied to the remaining surface water demand of each land cell to compute the allocated surface water to each land cell.

    Then groundwater abstraction is computed to satisfy the remaining local water demand, where groundwater abstraction is limited by a fixed scaling factor of 0.75 applied to the groundwater volume. Finally, for allocation areas the water demand $\SIb{\subtext{V}{gw,demand}}{m^3}$ and availability $\SIb{\subtext{V}{gw, availabilty}}{m^3}$ are summed, and the total groundwater abstraction is then:

    \[ \subtext{V}{gw, abstraction} = \min(\subtext{V}{gw, demand}, \subtext{V}{gw, availabilty})\]

    The fraction of available groundwater that can be abstracted at allocation area level $\SIb{\subtext{f}{gw, abstraction}}{-}$ at the allocation area level is then:

    \[ \subtext{f}{gw, abstraction} = \frac{\subtext{V}{gw, abstraction}}{\subtext{V}{gw, available}}\]

    This fraction is applied to the remaining available groundwater of each land cell to compute groundwater abstraction and to update the local groundwater abstraction.

    The fraction of water demand that can be satisfied by available groundwater $\SIb{\subtext{f}{gw,allocation}}{-}$ at the allocation area level is then:

    \[ \subtext{f}{gw, allocation} = \frac{\subtext{V}{gw, abstraction}}{\subtext{V}{gw, demand}}\]

    This fraction is applied to the remaining groundwater demand of each land cell to compute the allocated groundwater to each land cell.

    Abstractions

    Groundwater abstraction is implemented by subtracting this amount from the recharge variable of the lateral subsurface flow component (kinematic wave) or the recharge rate of the groundwater flow module. Surface water abstraction $\SIb{}{m^3 s^{-1}}$ is divided by the flow length dl $\SIb{}{m}$ and subtracted from the lateral inflow of kinematic wave routing scheme for river flow. For the local inertial routing scheme (river and optional floodplain routing), the surface water abstraction $\SIb{}{m^3 s^{-1}}$ is subtracted as part of the continuity equation of the local inertial model. For reservoir and lake locations surface water is abstracted (act_surfacewater_abst_vol $\SIb{}{m^3 s^{-1}}$) from the reservoir volume $\SIb{}{m^3}$ and lake storage $\SIb{}{m^3}$ respectively, with a subsequent update of the lake waterlevel $\SIb{}{m}$.

    References

    • Brooks, R. H., and Corey, A. T., 1964, Hydraulic properties of porous media, Hydrology Papers 3, Colorado State University, Fort Collins, 27 p.
    • Feddes, R.A., Kowalik, P.J. and Zaradny, H., 1978, Simulation of field water use and crop yield, Pudoc, Wageningen, Simulation Monographs.
    • Gash, J. H. C., 1979, An analytical model of rainfall interception by forests, Q. J. Roy. Meteor. Soc., 105, 43–55, doi:1026 10.1002/qj.497105443041027.
    • Liu, S., 1998, Estimation of rainfall storage capacity in the canopies of cypress wetlands and slash pine uplands in North-Central Florida, J. Hydr., 207, 32–41, doi: 10.1016/S0022-1694(98)00115-2.
    • Pitman, J., 1989, Rainfall interception by bracken in open habitats—relations between leaf area, canopy storage and drainage rate, J. Hydr. 105, 317–334, doi: 10.1016/0022-1694(89)90111-X.
    • Van Dijk, A. I. J. M., and Bruijnzeel, L. A., 2001, Modelling rainfall interception by vegetation of variable density using an adapted analytical model, Part 2, Model validation for a tropical upland mixed cropping system, J. Hydr., 247, 239–262.
    • Vertessy, R., and Elsenbeer, H., 1999, Distributed modeling of storm flow generation in an amazonian rain forest catchment: effects of model parameterization, Water Resour. Res., 35, 2173–2187. doi: 10.1029/1999WR9000511257.
    • Wigmosta, M. S., Lane, L. J., Tagestad, J. D., and Coleman A. M., 2009, Hydrologic and erosion models to assess land use and management practices affecting soil erosion, J. Hydrol. Eng., 14, 27-41.
    • Xie, X. and Cui, Y., 2011, Development and test of SWAT for modeling hydrological processes in irrigation districts with paddy rice, J. Hydrol., 396, pp. 61-71.
    diff --git a/previews/PR490/model_docs/vertical/sediment/index.html b/previews/PR490/model_docs/vertical/sediment/index.html new file mode 100644 index 000000000..8a6614612 --- /dev/null +++ b/previews/PR490/model_docs/vertical/sediment/index.html @@ -0,0 +1,5 @@ + +Sediment · Wflow.jl

    Sediment

    Over the land, soil erosion, also called soil loss, is closely linked to the water cycle. The main processes governing sediment generation are splash erosion from rain droplets, and sheet and rill erosion from the shear stress caused by overland flow. The intensity of soil erosion by rain or flow depends on the land and soil characteristics such as slope, land use or soil type. Once soil is eroded, the detached particles can be transported downslope by overland flow. Along the transport pathways, soil particles can also be deposited due to a low flow velocity, a change of topography in depressions, footslopes or valley bottoms, and/or can be filtered and stopped by a change in vegetation such as field boundaries.

    The inland part of the sediment gathers these different processes, separated in a vertical structure for the soil loss and lateral structure for the transport in overland flow.

    Overview of the different processes for a land cell in wflow_sediment.

    sediment_inland

    Soil Erosion

    The first process to consider in sediment dynamics is the generation of sediments by land erosion. The main processes behind soil loss are rainfall erosion and overland flow erosion. In order to model such processes at a fine time and space scale, physics-based models such as ANSWERS and EUROSEM were chosen here.

    The choice of rainfall erosion method is set up in the model section of the TOML:

    [model]
    +rainerosmethod = "answers" # Rainfall erosion equation: ["answers", "eurosem"]

    Rainfall erosion

    In wflow_sediment, rainfall erosion can both be modelled using EUROSEM or ANSWERS equation. The main difference between the models is that EUROSEM uses a more physics-based approach based on the kinetic energy of the rain drops impacting the soil (Morgan et al, 1998), while ANSWERS is more empirical and uses parameters from the USLE model (Beasley et al, 1991).

    In EUROSEM, rainfall erosion is modelled according to rainfall intensity and its kinetic energy when it reaches the soil according to equations developed by Brandt (1990). As the intensity of the rain kinetic energy depends on the length of the fall, rainfall intercepted by vegetation will then be reduced compared to direct throughfall. The kinetic energy of direct throughfall is estimated by (Morgan et al, 1998):

    \[ \subtext{\mathrm{KE}}{direct} = 8.95 + 8.44\,\log_{10}(R_i)\]

    where $\SIb{\subtext{\mathrm{KE}}{direct}}{J m^{-2} mm^{-1}}$ is the kinetic energy of direct throughfall and $\SIb{R_i}{mm h^{-1}}$ is rainfall intensity. If the rainfall is intercepted by vegetation and falls as leaf drainage, its kinetic energy is then reduced according to (Brandt, 1990):

    \[ \subtext{\mathrm{KE}}{leaf} = 15.8\,\sqrt{H_p} - 5.87\]

    where $\SIb{\subtext{\mathrm{KE}}{leaf}}{J m^{-2} mm^{-1}}$ is kinetic energy of leaf drainage and $\SIb{H_p}{m}$ is the effective canopy height (half of plant height). Canopy height can be derived from the global map from Simard & al. (2011) or by user input depending on the land use.

    Kinetic energies from both direct throughfall and leaf drainage are then multiplied by the respective depths of direct throughfall and leaf drainage (mm) and added to get the total rainfall kinetic energy $\mathrm{KE}$. The soil detached by rainfall $\SIb{D_R}{g m^{-2}}$ is then:

    \[ D_R = k\,\mathrm{KE}\,e^{-\varphi h}\]

    where $\SIb{k}{g J^{-1}}$ is an index of the detachability of the soil, $\SIb{\mathrm{KE}}{J m^{-2}}$ is the total rainfall kinetic energy, $\SIb{h}{m}$ is the surface runoff depth on the soil and $\varphi$ is an exponent varying between $0.9$ and $3.1$ used to reduce rainfall impact if the soil is already covered by water. As a simplification, Torri (1987) has shown that a value of $2.0$ for $\varphi$ is representative enough for a wide range of soil conditions. The detachability of the soil $k$ depends on the soil texture (proportion of clay, silt and sand content) and corresponding values are defined in EUROSEM user guide (Morgan et al, 1998). As a simplification, in wflow_sediment, the mean value of the detachability shown in the table below are used. Soil texture can for example be derived from the topsoil clay and silt content from SoilGrids (Hengl et al, 2017).

    Table: Mean detachability of soil depending on its texture (Morgan et al, 1998).

    Texture (USDA system)Mean detachability $\SIb{k}{g J^{-1}}$
    Clay2.0
    Clay Loam1.7
    Silt1.2
    Silt Loam1.5
    Loam2.0
    Sandy Loam2.6
    Loamy Sand3.0
    Fine Sand3.5
    Sand1.9

    Rainfall erosion is handled differently in ANSWERS. There, the impacts of vegetation and soil properties are handled through the USLE coefficients in the equation (Beasley et al, 1991):

    \[ D_R = 0.108 \, \subtext{C}{USLE} \, \subtext{K}{USLE} \, A_i \, R_i^2\]

    where $\SIb{D_R}{kg min^{-1}}$ is the soil detachment by rainfall, $\subtext{C}{USLE}$ is the soil cover-management factor from the USLE equation, $\subtext{K}{USLE}$ is the soil erodibility factor from the USLE equation, $\SIb{A_i}{m^2}$ is the area of the cell and $\SIb{R_i}{mm\;min^{-1}}$ is the rainfall intensity. There are several methods available to estimate the $C$ and $K$ factors from the USLE. They can come from user input maps, for example maps resulting from Panagos & al.'s recent studies for Europe (Panagos et al, 2015) (Ballabio et al, 2016). To get an estimate of the $C$ factor globally, the other method is to estimate $C$ values for the different land use type in from global land cover maps (e.g. GlobCover). An example is given for the global land cover map GlobCover, summed up in the table below, the values come from a literature study including Panagos et al.'s review (2015), Gericke & al. (2015), Mansoor & al. (2013), Chadli et al. (2016), de Vente et al. (2009), Borrelli et al. (2014), Yang et al. (2003) and Bosco et al. (2015).

    The other methods to estimate the USLE $K$ factor are to use either topsoil composition or topsoil geometric mean diameter. $K$ estimation from topsoil composition is estimated with the equation developed in the EPIC model (Williams et al, 1983):

    \[ \subtext{K}{USLE} = \left[ 0.2 + 0.3\exp\left(-0.0256\;\mathrm{SAN}\frac{(1-\mathrm{SIL})}{100}\right) \right] + \left(\frac{\mathrm{SIL}}{\mathrm{CLA}+\mathrm{SIL}}\right)^{0.3} \\~\\ + \left(1-\frac{0.25\;\mathrm{OC}}{\mathrm{OC}+e^{3.72-2.95\;\mathrm{OC}}}\right)\left(1-\frac{0.75\;\mathrm{SN}}{\mathrm{SN}+e^{-5.51+22.9\;\mathrm{SN}}}\right)\]

    where $\SIb{\mathrm{CLA}}{\%}$, $\SIb{\mathrm{SIL}}{\%}$, $\SIb{\mathrm{SAN}}{\%}$ are respectively the clay, silt and sand fractions of the topsoil, $\SIb{OC}{\%}$ is the topsoil organic carbon content and $\mathrm{SN} = 1-\mathrm{SAN}/100$. These soil parameters can be derived for example from the SoilGrids dataset. The $K$ factor can also be estimated from the soil mean geometric diameter using the formulation from the RUSLE guide by Renard & al. (1997):

    \[ \subtext{K}{USLE} = 0.0034 + 0.0405\exp\left(-\dfrac{1}{2}\left(\dfrac{\log_{10}(D_g)+1.659}{0.7101}\right)^2\right)\]

    where $D_g$ is the soil geometric mean diameter (mm) estimated from topsoil clay, silt, sand fraction.

    Table: Estimation of USLE C factor per Globcover land use type

    GlobCover ValueGlobcover label$\subtext{C}{USLE}$
    11Post-flooding or irrigated croplands (or aquatic)0.2
    14Rainfed croplands0.35
    20Mosaic cropland (50-70%) vegetation (grassland/shrubland/forest) (20-50%)0.27
    30Mosaic vegetation (grassland/shrubland/forest) (50-70%) / cropland (20-50%)0.25
    40Closed to open (>15%) broadleaved evergreen or semi-deciduous forest (>5m)0.0065
    50Closed (>40%) broadleaved deciduous forest (>5m)0.001
    60Open (15-40%) broadleaved deciduous forest/woodland (>5m)0.01
    70Closed (>40%) needleleaved evergreen forest (>5m)0.001
    90Open (15-40%) needleleaved deciduous or evergreen forest (>5m)0.01
    100Closed to open (>15%) mixed broadleaved and needleleaved forest (>5m)0.02
    110Mosaic forest or shrubland (50-70%) / grassland (20-50%)0.015
    120Mosaic grassland (50-70%) / forest or shrubland (20-50%)0.03
    130Closed to open (>15%) (broadleaved or needleleaved, evergreen or deciduous) shrubland (<5m)0.035
    140Closed to open (>15%) herbaceous vegetation (grassland, savannas or lichens/mosses)0.05
    150Sparse (<15%) vegetation0.35
    160Closed to open (>15%) broadleaved forest regularly flooded (semi-permanently or temporarily) - Fresh or brackish water0.001
    170Closed (>40%) broadleaved forest or shrubland permanently flooded - Saline or brackish water0.0005
    180Closed to open (>15%) grassland or woody vegetation on regularly flooded or waterlogged soil - Fresh, brackish or saline water0.04
    190Artificial surfaces and associated areas (Urban areas >50%)0.0
    200Bare areas0.0
    210Water bodies0.0
    220Permanent snow and ice0.0
    230No data (burnt areas, clouds,…)0.0

    Overland flow erosion

    Overland flow (or surface runoff) erosion is induced by the strength of the shear stress of the surface water on the soil. As in rainfall erosion, the effect of the flow shear stress can be reduced by the soil vegetation or by the soil properties. In wflow_sediment, soil detachment by overland flow is modelled as in ANSWERS with (Beasley et al, 1991):

    \[ D_G = 0.90 \, \subtext{C}{USLE} \, \subtext{K}{USLE} \, A_i \, S \, q\]

    where $\SIb{D_F}{kg\;min^{-1}}$ is soil detachment by flow, $\subtext{C}{USLE}$ and $\subtext{K}{USLE}$ are the USLE cover and soil erodibility factors, $\SIb{A_i}{m^2}$ is the cell area, $S$ is the slope gradient and $\SIb{q}{m^2 min^{-1}}$ is the overland flow rate per unit width. The USLE $C$ and $K$ factors can be estimated with the same methods as for rainfall erosion and here the slope gradient is obtained from the sinus rather than the tangent of the slope angle.

    Delivery to the river system

    Once soil is detached, it can be transported by overland flow and reach the river system. This process is described in Sediment Flux in overland flow.

    References

    • D.B Beasley and L.F Huggins. ANSWERS - Users Manual. Technical report, EPA, 1991.
    • P. Borrelli, M. Märker, P. Panagos, and B. Schütt. Modeling soil erosion and river sediment yield for an intermountain drainage basin of the Central Apennines, Italy. Catena, 114:45-58, 2014. 10.1016/j.catena.2013.10.007
    • C. Bosco, D. De Rigo, O. Dewitte, J. Poesen, and P. Panagos. Modelling soil erosion at European scale: Towards harmonization and reproducibility. Natural Hazards and Earth System Sciences, 15(2):225-245, 2015. 10.5194/nhess-15-225-2015
    • C.J Brandt. Simulation of the size distribution and erosivity of raindrops and throughfall drops. Earth Surface Processes and Landforms, 15(8):687-698, dec 1990.
    • K. Chadli. Estimation of soil loss using RUSLE model for Sebou watershed (Morocco). Modeling Earth Systems and Environment, 2(2):51, 2016. 10.1007/s40808-016-0105-y
    • G R Foster. Modeling the erosion process. Hydrologic modeling of small watersheds, pages 295-380, 1982.
    • A. Gericke. Soil loss estimation and empirical relationships for sediment delivery ratios of European river catchments. International Journal of River Basin Management, 2015. 10.1080/15715124.2014.1003302
    • L.D.K. Mansoor, M.D. Matlock, E.C. Cummings, and L.L. Nalley. Quantifying and mapping multiple ecosystem services change in West Africa. Agriculture, Ecosystems and Environment, 165:6-18, 2013. 10.1016/j.agee.2012.12.001
    • Q Morgan, J.N Smith, R.E Govers, G Poesen, J.W.A Auerswald, K Chisci, G Torri, D Styczen, and M E Folly. The European soil erosion model (EUROSEM): documentation and user guide. Technical report, 1998.
    • S.L Neitsch, J.G Arnold, J.R Kiniry, and J.R Williams. SWAT Theoretical Documentation Version 2009. Texas Water Resources Institute, pages 1-647, 2011. 10.1016/j.scitotenv.2015.11.063
    • P. Panagos, P. Borrelli, K. Meusburger, C. Alewell, E. Lugato, and L. Montanarella. Estimating the soil erosion cover-management factor at the European scale. Land Use Policy, 48:38-50, 2015. 10.1016/j.landusepol.2015.05.021
    • K Renard, Gr Foster, Ga Weesies, Dk McCool, and Dc Yoder. Predicting soil erosion by water: a guide to conservation planning with the Revised Universal Soil Loss Equation (RUSLE). Washington, 1997.
    • D. Torri, M. Sfalanga, and M. Del Sette. Splash detachment: Runoff depth and soil cohesion. Catena, 14(1-3):149-155, 1987. 10.1016/S0341-8162(87)80013-9
    • J. de Vente, J. Poesen, G. Govers, and C. Boix-Fayos. The implications of data selection for regional erosion and sediment yield modelling. Earth Surface Processes and Landforms, 34(15):1994-2007, 2009. 10.1002/esp.1884
    • G. Verstraeten and J. Poesen. Estimating trap efficiency of small reservoirs and ponds: methods and implications for the assessment of sediment yield. Progress in Physical Geography, 24(2):219-251, 2000. 10.1177/030913330002400204
    • O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, and J. Poesen. Adapting SWAT hillslope erosion model to predict sediment concentrations and yields in large Basins. Science of the Total Environment, 538:855-875, 2015. 10.1016/j.scitotenv.2015.08.095
    • J.R. Williams, K.G. Renard, and P.T. Dyke. EPIC A new method for assessing erosion's effect on soil productivity. Journal of Soil and Water Conservation, 38(5):381-383, 1983.
    • D. Yang, S. Kanae, T. Oki, T. Koike, and K. Musiake. Global potential soil erosion with reference to land use and climate changes. Hydrological Processes, 17(14):2913-2928, 2003. 10.1002/hyp.1441
    diff --git a/previews/PR490/search/index.html b/previews/PR490/search/index.html new file mode 100644 index 000000000..ae2f7cb08 --- /dev/null +++ b/previews/PR490/search/index.html @@ -0,0 +1,2 @@ + +Search · Wflow.jl diff --git a/previews/PR490/search_index.js b/previews/PR490/search_index.js new file mode 100644 index 000000000..019165de6 --- /dev/null +++ b/previews/PR490/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"model_docs/lateral/waterbodies/#reservoir_lake","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"","category":"section"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Simplified reservoirs and lakes models can be included as part of the river network.","category":"page"},{"location":"model_docs/lateral/waterbodies/#Reservoirs","page":"Reservoirs and Lakes","title":"Reservoirs","text":"","category":"section"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Simple reservoirs can be included within the river routing by supplying the following reservoir parameters:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"locs - Outlet of the reservoirs in which each reservoir has a unique id\narea - Surface area of the reservoirs SIbm^2\nareas - Reservoir coverage\ntargetfullfrac - Target fraction full (of max storage) for the reservoir: number between 0 and 1\ntargetminfrac - Target minimum full fraction (of max storage). Number between 0 and 1\nmaxvolume - Maximum reservoir storage (above which water is spilled) SIbm^3\ndemand - Minimum (environmental) flow requirement downstream of the reservoir SIbm^3 s^-1\nmaxrelease - Maximum Q that can be released if below spillway SIbm^3 s^-1","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"By default the reservoirs are not included in the model. To include them put the following lines in the TOML file of the model:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"[model]\nreservoirs = true","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Finally there is a mapping required between external and internal parameter names in the TOML file, with below an example:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"[input]\n\n[input.lateral.river.reservoir]\narea = \"ResSimpleArea\"\nareas = \"wflow_reservoirareas\"\ndemand = \"ResDemand\"\nlocs = \"wflow_reservoirlocs\"\nmaxrelease = \"ResMaxRelease\"\nmaxvolume = \"ResMaxVolume\"\ntargetfullfrac = \"ResTargetFullFrac\"\ntargetminfrac = \"ResTargetMinFrac\"","category":"page"},{"location":"model_docs/lateral/waterbodies/#Lakes-(unregulated-and-regulated)","page":"Reservoirs and Lakes","title":"Lakes (unregulated and regulated)","text":"","category":"section"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Lakes are modelled using a mass balance approach:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":" dfracS(t + Delta t)Delta t = dfracS(t)Delta t + subtextQin + dfrac(P-E) ADelta t - subtextQout","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"where SIbSm^3 is lake storage, SIbDelta ts is the model timestep, SIbsubtextQinm^3 s^-1 is the sum of inflows (river, overland and lateral subsurface flow), SIbsubtextQoutm^3 s^-1 is the lake outflow at the outlet, SIbPm is precipitation, SIbEm is lake evaporation and SIbAm^2 is the lake surface area.","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"(Image: lake_schematisation)","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Lake schematization.","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Most of the variables in this equation are already known or coming from previous timestep, apart from S(t+ Delta t) and subtextQout which can both be linked to the water level H in the lake using a storage curve S = f(H) and a rating curve Q = f(H). In wflow, several options are available to select storage and rating curves, and in most cases, the mass balance is then solved by linearization and iteration or using the Modified Puls Approach from Maniak (Burek et al., 2013). Storage curves in wflow can either:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Come from the interpolation of field data linking volume and lake height,\nBe computed from the simple relationship S = A H.","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Rating curves in wflow can either:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Come from the interpolation of field data linking lake outflow and water height, also appropriate for regulated lakes/ dams,\nBe computed from a rating curve of the form subtextQout = alpha (H-H_0)^beta, where H_0 is the minimum water level under which the outflow is zero. Usual values for beta are frac32 for a rectangular weir or 2 for a parabolic weir (Bos, 1989).","category":"page"},{"location":"model_docs/lateral/waterbodies/#Modified-Puls-Approach","page":"Reservoirs and Lakes","title":"Modified Puls Approach","text":"","category":"section"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"The Modified Puls Approach is a resolution method of the lake balance that uses an explicit relationship between storage and outflow. Storage is assumed to be equal to A H and the rating curve for a parabolic weir (beta = 2):","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":" S = A H = A (h + H_0) = A sqrtfracQalpha + A H_0","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Inserting this equation in the mass balance gives:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":" dfracADelta t sqrtfracQalpha + Q = dfracS(t)Delta t + subtextQin +\n AdfracP-EDelta t - dfracA H_0Delta t = mathrmSI - dfracA H_0Delta t","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"The solution for Q is then:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":" Q = \n begincases\n beginalign*\n frac14left(-mathrmLF + sqrtmathrmLF^2 + 4 left(mathrmSI - dfracA H_0Delta t right)\n right)^2 text if quad mathrmSI dfracA H_0Delta t \n 0 text if quad mathrmSI leq dfracA H_0Delta t\n endalign*\n endcases","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"where","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":" mathrmLF = dfracADelta t sqrtalpha","category":"page"},{"location":"model_docs/lateral/waterbodies/#Lake-parameters","page":"Reservoirs and Lakes","title":"Lake parameters","text":"","category":"section"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Lakes can be included within the kinematic wave river routing in wflow, by supplying the following parameters:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"area - Surface area of the lakes [m^2]\nareas - Coverage of the lakes\nlocs - Outlet of the lakes in which each lake has a unique id\nlinkedlakelocs - Outlet of linked (downstream) lakes (unique id)\nwaterlevel - Lake water level [m], used to reinitiate lake model\nthreshold - Water level threshold H_0 under which outflow is zero [m]\nstorfunc - Type of lake storage curve ; 1 for S = AH (default) and 2 for S = f(H) from lake data and interpolation\noutflowfunc - Type of lake rating curve ; 1 for Q = f(H) from lake data and interpolation, 2 for general Q = b(H - H_0)^e and 3 in the case of Puls Approach Q = b(H - H_0)^2 (default)\nb - Rating curve coefficient\ne - Rating curve exponent","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"By default, the lakes are not included in the model. To include them, put the following line in the TOML file of the model:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"[model]\nlakes = true","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"There is also a mapping required between external and internal parameter names in the TOML file, with below an example:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"[input]\n\n[input.lateral.river.lake]\narea = \"lake_area\"\nareas = \"wflow_lakeareas\"\nb = \"lake_b\"\ne = \"lake_e\"\nlocs = \"wflow_lakelocs\"\noutflowfunc = \"lake_outflowfunc\"\nstorfunc = \"lake_storfunc\"\nthreshold = \"lake_threshold\"\nwaterlevel = \"lake_waterlevel\"","category":"page"},{"location":"model_docs/lateral/waterbodies/#Additional-settings","page":"Reservoirs and Lakes","title":"Additional settings","text":"","category":"section"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Storage and rating curves from field measurement can be supplied to wflow via CSV files supplied in the same folder of the TOML file. Naming of the files uses the ID of the lakes where data are available and is of the form lake_sh_1.csv and lake_hq_1.csv for respectively the storage and rating curves of lake with ID 1.","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"The storage curve is stored in a CSV file with lake level SIbm in the first column H and corresponding lake storage SIbm^3 in the second column S:","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"H, S\n392.21, 0\n393.21, 430202000\n393.71, 649959000\n394.21, 869719000","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"The rating curve uses level and discharge data depending on the Julian day of the year (JDOY), and can be also used for regulated lakes/ dams. The first line contains H for the first column. The other lines contain the water level and the corresponding discharges for the different JDOY (1-365), see also the example below, that shows part of a CSV file (first 4 Julian days). The volume above the maximum water level of the rating curve is assumed to flow instantaneously out of the lake (overflow).","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"H\n394, 43, 43, 43, 43\n394.01, 44.838, 44.838, 44.838, 44.838\n394.02, 46.671, 46.671, 46.671, 46.671\n394.03, 48.509, 48.509, 48.509, 48.509\n394.04, 50.347, 50.347, 50.347, 50.347\n394.05, 52.179, 52.179, 52.179, 52.179","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Linked lakes: In some cases, lakes can be linked and return flow can be allowed from the downstream to the upstream lake. The linked lakes are defined in the linkedlakelocs parameter that represent the downstream lake location ID, at the grid cell of the upstream lake location.","category":"page"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"note: Note\nIn every file, level units are meters [m] above lake bottom and not meters above sea level [m asl]. Especially with storage/rating curves coming from data, please be careful and convert units if needed.","category":"page"},{"location":"model_docs/lateral/waterbodies/#References","page":"Reservoirs and Lakes","title":"References","text":"","category":"section"},{"location":"model_docs/lateral/waterbodies/","page":"Reservoirs and Lakes","title":"Reservoirs and Lakes","text":"Bos M.G., 1989. Discharge measurement structures. Third revised edition, International Institute for Land Reclamation and Improvement ILRI, Wageningen, The Netherlands.\nBurek P., Van der Knijf J.M., Ad de Roo, 2013. LISFLOOD – Distributed Water Balance and flood Simulation Model – Revised User Manual. DOI: http://dx.doi.org/10.2788/24719.","category":"page"},{"location":"model_docs/vertical/flextopo/#vert_flextopo","page":"FLEXTopo","title":"FLEXTopo","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/#Introduction","page":"FLEXTopo","title":"Introduction","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"This section describes the different vertical processes available as part of the vertical FLEXTopo concept. This concept is part of the wflow_flextopo model. The FLEXTopo model is a process-based model, which consists of different parallel classes connected through their groundwater storage. These classes are usually delineated from topographical data to represent the variability in hydrological processes across user-defined Hydrological Response Units (HRU). The main assumption underlying the concept, which was first introduced by Savenije (2010), is that different parts of the landscape fulfill different tasks in runoff generation and, hence, can be represented by different model structures. Commonly used classes include hillslopes, plateau and wetlands. Hillslopes are steep areas in a catchment and are generally forested. The dominant runoff process in hillslopes is assumed to be characterized by subsurface flow. Plateaus are defined as relatively flat and are relatively high above the stream, with deep groundwater levels. Depending on the specific conditions, the dominant runoff processes are groundwater recharge, quick subsurface flow and hortonian overland flow, which is especially important in agricultural areas. Saturation overland flow and capillary rise are the dominant processes on the riparian wetland class, where groundwater levels are shallow and assumed to rise quickly during an event. The strength of the concept is that the definition of classes and associated model structures is modular and flexible and not constrained by a predefined fixed model structure. The flexible approach allows to develop process-based models for different topographic, climatic, geologic and land use conditions, making use of the available data and expert knowledge. The FLEXTopo modeling approach has been applied in a lumped and distributed way in various applications across the globe (Gao et al., 2014; Euser et al., 2015; Hanus et al., 2021; Hrachowitz et al. 2021; Hulsman et al. 2021; Bouaziz et al., 2022).","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The wflow_flextopo model is set-up in a modular way, implying that the user is free to determine the number of classes and which processes and/or parameters to include or exclude for each class. For each cell in the model domain, the percentage of each class in the cell is provided by the user in the staticmaps. The most complete model structure implemented in wflow_flextopo is shown in the figure below. However, it is also possible to bypass each bucket or to deactivate processes through parameter values (see FLEXTopo configuration). It is also possible for users to contribute to the code by adding different conceptualizations for the different storages. When defining several classes, the model structures for each class are implemented in parallel, except for the common glacier, snow and groundwater processes, which are not class specific. An example of a three classes model is also shown in the Figure below.","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"(Image: flextopo_julia_1class.png) Schematic representation of the FLEXTopo model for a single class model including all storages and fluxes. Main parameters are denoted in red.","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"(Image: flextopo_julia_3class.png) Example of a three class model with different model structure configurations per class","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The descriptions below of each of the FLEXTopo model components are given for the most complete model structure with the symbols as shown in the schematic representation of the one class model in the Figure above. By bypassing storages and/or setting parameters to specific values, the model structure can be adapted to a user-defined model structure.","category":"page"},{"location":"model_docs/vertical/flextopo/#Snow","page":"FLEXTopo","title":"Snow","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The snow model is described in Snow and glaciers.","category":"page"},{"location":"model_docs/vertical/flextopo/#Glaciers","page":"FLEXTopo","title":"Glaciers","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Glacier processes are described in Snow and glaciers. Glacier modelling is enabled by specifying the following in the TOML file:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"[model]\nglacier = true","category":"page"},{"location":"model_docs/vertical/flextopo/#Correction-factors-for-forcing-data","page":"FLEXTopo","title":"Correction factors for forcing data","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The e_mathrmcorr and p_mathrmcorr model parameters can be used to adjust the potential evaporation and precipitation, respectively.","category":"page"},{"location":"model_docs/vertical/flextopo/#Interception","page":"FLEXTopo","title":"Interception","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"After the snow module, rainfall P_mathrmR [mm t^-1] and snowmelt P_mathrmM [mm t^-1] enter the interception storage S_mathrmI [mm]. The maximum interception storage is defined by the I_mathrmmax [mm] parameter for each class. Interception evaporation E_mathrmI [mm t^-1] occurs at potential rate E_mathrmP [mm t^-1] as long as there is enough water in the interception storage. Effective precipitation P_mathrmE [mm t^-1] flows out of the interception store when the storage capacity is exceeded. Interception evaporation is subtracted from potential evaporation to ensure total evaporation does not exceed potential evaporation.","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The following equations apply:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" mathrmdS_mathrmImathrmdt = (P_mathrmR + P_mathrmM) - E_mathrmI - P_mathrmE","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" P_mathrmE = mathrmmax(0 (S_mathrmI - I_mathrmmax)mathrmdt)","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" E_mathrmI = mathrmmin(E_mathrmP S_mathrmImathrmdt)","category":"page"},{"location":"model_docs/vertical/flextopo/#Hortonion-ponding-and-runoff","page":"FLEXTopo","title":"Hortonion ponding and runoff","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Hortonian overland flow processes are represented by a combination of two storages: a horton ponding storage S_mathrmHp [mm] and a runoff generating storage S_mathrmHf [mm]. This conceptualization was introduced by de Boer-Euser (2017) and included in the plateau class to represent hortonian overland flow (infiltration excess overland flow) in agricultural fields. When the storage capacity of the ponding storage is exceeded, runoff Q_mathrmH [mm t^-1] is generated that enters the horton runoff storage. The horton runoff generating storage is included to slightly smooth the precipitation signal. However, the response time of the runoff generation storage K_mathrmHf [t^-1] is very short to generate fast runoff Q_mathrmHf [mm t^-1].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Effective precipitation P_mathrmE [mm t^-1] from the interception module enters the horton ponding storage, which has a maximum storage capacity S_mathrmHmax [mm]. When the inflow exceeds the storage capacity, direct runoff is generated Q_mathrmHdirect [mm t^-1] and net infiltration in the horton ponding storage is denoted as Q_mathrmHinnet [mm t^-1].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Evaporation from the horton ponding storage E_mathrmH [mm t^-1] is based on a simple formulation to express water stress. The equation describes how actual evaporation is linearly reduced when the relative horton ponding storage overlineS_mathrmHp [-] is below a certain threshold L_mathrmP [-] parameter.","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"A beta function with parameter beta [-] is used to split the net infiltrating water to storage and to runoff Q_mathrmH [mm t^-1], to which is added the direct runoff Q_mathrmHdirect [mm t^-1].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The shape of the beta function for various values of beta [-] is shown below:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" using Printf\n using CairoMakie","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" let # hide\n fig = Figure(resolution = (800, 400)) # hide\n ax = Axis(fig[1, 1], xlabel = \"S/Smax [-]\", ylabel = \"Fraction of runoff [-]\") # hide\n x = 0:0.01:1 # hide\n betas = [0.3, 1.0, 3.0] # hide\n for beta in betas # hide\n lines!(ax, x, (1 .- (1 .- x).^beta), label = @sprintf(\"beta = %.1f\", beta)) # hide\n end # hide\n Legend(fig[1, 2], ax, \"beta\") # hide\n fig # hide\n end # hide","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Additionally, water infiltrates from the horton ponding storage to the root zone storage (Q_mathrmHR [mm t^-1]), based on a formulation using a maximum infiltration capacity F_mathrmmax [mm t^-1] and a decay coefficient F_mathrmdec [-].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The maximum storage capacity of the horton ponding storage is reduced when soils are likely to be frozen S_mathrmHmaxfrost [mm], i.e. during periods when the temperature is below zero for several consecutive days.","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The following equations apply for the Horton ponding storage S_mathrmHp [mm]:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" mathrmdS_mathrmHpmathrmdt = P_mathrmE - E_mathrmH - Q_mathrmH - Q_mathrmHR","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The constitutive equations are:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmHdirect=mathrmmax((S_mathrmHp+P_mathrmES_mathrmHmax)00)","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmHinnet = P_mathrmE Q_mathrmHdirect","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" overlineS_mathrmHp = S_mathrmHpS_mathrmHmax","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" E_mathrmH = mathrmmin ( (E_mathrmP - E_mathrmI) cdot mathrmmin(overlineS_mathrmHpL_mathrmP1) S_mathrmHpmathrmdt )","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmH = Q_mathrmHinnet cdot (1-(1-overlineS_mathrmHp)^beta)","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmHR = F_mathrmmax cdot mathrmexp(-F_mathrmdec cdot overlineS_mathrmHp)","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The reduction of the storage capacity of the horton ponding storage during frozen soil conditions is calculated following the equations provided by de Boer-Euser (2017):","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" S_mathrmHmaxfrost = F_mathrmT cdot S_mathrmHmax","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"with:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"F_mathrmT =\n begincases\n S_mathrmHmin textif F_mathrmaccfr F_mathrmaccfr0\n fracF_mathrmaccF_mathrmaccfr1 - F_mathrmaccfr0 - fracF_mathrmaccfr0F_mathrmaccfr1 - F_mathrmaccfr0 textif F_mathrmaccfr0 le F_mathrmaccfr le F_mathrmaccfr1\n 1 textif F_mathrmaccfr F_mathrmaccfr1\n endcases","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"where S_mathrmHmin [-], F_mathrmaccfr0 [degree t], F_mathrmaccfr1 [degree t] and K_mathrmmf [-] are all model parameters to describe: a coefficient to reduce S_mathrmHmax to a minimum storage capacity, the minimum and maximum modelled accumulated frost and a melt coefficient for the frozen topsoil, respectively.","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The following equations apply for the Horton fast runoff storage S_mathrmHf [mm]:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" mathrmdS_mathrmHfmathrmdt = Q_mathrmH - Q_mathrmHf","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmHf = K_mathrmHf^-1 cdot S_mathrmHf","category":"page"},{"location":"model_docs/vertical/flextopo/#Root-zone-soil-moisture","page":"FLEXTopo","title":"Root zone soil moisture","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The incoming water from the interception and hortonian routines Q_mathrmHR [mm t^-1] enters the root zone storage S_mathrmR [mm]. The root zone storage has a maximum capacity S_mathrmRmax [mm], which represents the volume of water in the unsaturated root zone, which is available to the roots of vegetation for transpiration. Abundant water which exceeds the capacity of the root zone storage cannot infiltrate and becomes directly available for runoff Q_mathrmRdirect [mm t^-1]. The net infiltration in the root zone storage is denoted as Q_mathrmRinnet [mm t^-1].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"A simple formulation to express water stress is used to calculate evaporation E_mathrmR [mm t^-1] from the root zone storage. The equation describes how actual evaporation is linearly reduced when the relative root zone storage overlineS_mathrmR [-] is below a certain threshold L_mathrmP [-] parameter.","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Next, a beta function with parameter beta [-] describes the partitioning of incoming water to the root zone storage and to runoff Q_mathrmR [mm t^-1]. The water that leaves the root zone storage is partitioned into the fast storage and through preferential recharge to the slow storage, based on a splitter parameter d_mathrms [-].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Water may also leave the root zone storage through percolation to the slow groundwater Q_mathrmperc [mm t^-1] or enter the root zone storage from the slow groundwater through capillary rise Q_mathrmcap [mm t^-1], based on a maximum percolation parameter Q_mathrmpercmax [mm t^-1] and a maximum capillary rise flux parameter Q_mathrmcapmax [mm t^-1].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The water balance equation for the root zone storage is:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" mathrmdS_mathrmRmathrmdt = Q_mathrmHR - E_mathrmR - Q_mathrmR - Q_mathrmperc + Q_mathrmcap","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The constitutive equations are:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmRdirect=mathrmmax((S_mathrmR+Q_mathrmHRS_mathrmRmax)00)","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmRinnet = Q_mathrmHR Q_mathrmRdirect","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" overlineS_mathrmR = S_mathrmRS_mathrmRmax","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" E_mathrmR = mathrmmin ( (E_mathrmP - E_mathrmI - E_mathrmH) cdot mathrmmin(overlineS_mathrmRL_mathrmP1) S_mathrmRmathrmdt )","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmR = Q_mathrmRinnet cdot (1-(1-overlineS_mathrmR)^beta)","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmperc = Q_mathrmpercmax cdot overlineS_mathrmR","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmcap = Q_mathrmcapmax cdot (1 - overlineS_mathrmR)","category":"page"},{"location":"model_docs/vertical/flextopo/#Fast-storage-and-runoff","page":"FLEXTopo","title":"Fast storage and runoff","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The outflow from the root zone storage Q_mathrmR [mm t^-1] is split with the splitter parameter d_mathrms [-] into inflow in the fast storage Q_mathrmRF [mm t^-1] and inflow in the slow storage Q_mathrmRS [mm t^-1] to represent preferential recharge. The fast runoff storage S_mathrmF [mm] generates fast runoff Q_mathrmF [mm t^-1] through a simple non-linear equation with a recession constant K_mathrmF [t^-1] and an exponent alpha [-].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The following equations apply:","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" mathrmdS_mathrmFmathrmdt = Q_mathrmRF - Q_mathrmF","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmRF = Q_mathrmR cdot (1-d_mathrms)","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmF = K_mathrmF^-1 cdot S_mathrmF^alpha","category":"page"},{"location":"model_docs/vertical/flextopo/#Common-slow-groundwater-storage-and-runoff","page":"FLEXTopo","title":"Common slow groundwater storage and runoff","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"The slow groundwater storage S_mathrmS [mm] is a shared storage for all the different classes. It is filled through preferential recharge from the outflow of the root zone storage Q_mathrmRS [mm t^-1] and through percolation Q_mathrmperc [mm t^-1]. It empties through capillary rise Q_mathrmcap [mm t^-1] and through a linear outflow Q_mathrmS [mm t^-1] with recession timescale coefficient K_mathrmS [t^-1].","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Total streamflow Q_mathrmTOT [mm t^-1] is the weighted sum of the horton fast runoff and the fast runoff from the different classes based on the fraction of each class in a cell F_mathrmhrufrac [-] and the slow runoff, which is then routed downstream along the river network through the kinematic wave.","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" mathrmdS_mathrmSmathrmdt = Q_mathrmRS + Q_mathrmperc - Q_mathrmS - Q_mathrmcap","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmRS = Q_mathrmR cdot d_mathrms","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":" Q_mathrmS = K_mathrmS^-1 cdot S_mathrmS","category":"page"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"Q_mathrmTOT = Q_mathrmS + sum_class=1^n (Q_mathrmFclass + Q_mathrmHfclass) cdot F_mathrmhrufracclass","category":"page"},{"location":"model_docs/vertical/flextopo/#References","page":"FLEXTopo","title":"References","text":"","category":"section"},{"location":"model_docs/vertical/flextopo/","page":"FLEXTopo","title":"FLEXTopo","text":"de Boer-Euser, T. (2017). Added value of distribution in rainfall-runoff models for the Meuse basin PhD thesis, Delft University of Technology. https://doi.org/10.4233/uuid:89a78ae9-7ffb-4260-b25d-698854210fa8\nBouaziz, L. J. E., Aalbers, E. E., Weerts, A. H., Hegnauer, M., Buiteveld, H., Lammersen, R., Stam, J., Sprokkereef, E., Savenije, H. H. G., and Hrachowitz, M. (2022) Ecosystem adaptation to climate change: the sensitivity of hydrological predictions to time-dynamic model parameters, Hydrol. Earth Syst. Sci., 26, 1295–1318, https://doi.org/10.5194/hess-26-1295-2022\nEuser, T., Hrachowitz, M., Winsemius, H. C., & Savenije, H. H. G. (2015). The effect of forcing and landscape distribution on performance and consistency of model structures. Hydrological Processes, 29(17), 3727–3743. https://doi.org/10.1002/hyp.10445\nGao, H., Hrachowitz, M., Fenicia, F., Gharari, S., & Savenije, H. H. G. (2014). Testing the realism of a topography-driven model (FLEX-Topo) in the nested catchments of the Upper Heihe, China. Hydrology and Earth System Sciences, 18(5), 1895–1915. https://doi.org/10.5194/hess-18-1895-2014\nHanus, S., Hrachowitz, M., Zekollari, H., Schoups, G., Vizcaino, M., and Kaitna, R. (2021) Future changes in annual, seasonal and monthly runoff signatures in contrasting Alpine catchments in Austria, Hydrol. Earth Syst. Sci., 25, 3429–3453, https://doi.org/10.5194/hess-25-3429-2021\nHrachowitz, M., Stockinger, M., Coenders-Gerrits, M., van der Ent, R., Bogena, H., Lücke, A., and Stumpp, C. (2021) Reduction of vegetation-accessible water storage capacity after deforestation affects catchment travel time distributions and increases young water fractions in a headwater catchment, Hydrol. Earth Syst. Sci., 25, 4887–4915, https://doi.org/10.5194/hess-25-4887-2021\nHulsman, P., Savenije, H. H. G., & Hrachowitz, M. (2021). Learning from satellite observations: Increased understanding of catchment processes through stepwise model improvement. Hydrology and Earth System Sciences, 25(2), 957–982. https://doi.org/10.5194/hess-25-957-2021\nSavenije, H. H. G. (2010). HESS opinions “topography driven conceptual modelling (FLEX-Topo).” Hydrology and Earth System Sciences, 14(12), 2681–2692. https://doi.org/10.5194/hess-14-2681-2010","category":"page"},{"location":"user_guide/intro/#About-the-user-guide","page":"About the user guide","title":"About the user guide","text":"","category":"section"},{"location":"user_guide/intro/","page":"About the user guide","title":"About the user guide","text":"The purpose of this user guide is to describe the steps for installing the wflow Julia software and setting up a simple model. The guide also includes a step-by-step process for configuring your model using the TOML file (model settings) and the netCDF gridded datasets.","category":"page"},{"location":"user_guide/intro/","page":"About the user guide","title":"About the user guide","text":"Sample data and model setup are also provided for the Moselle River Basin (a major tributary of the Rhine River), which can be used to explore the model software. The guide covers model setups for the wflow\\_sbm, wflow\\_hbv and wflow\\_sediment model concepts.","category":"page"},{"location":"user_guide/intro/","page":"About the user guide","title":"About the user guide","text":"Finally, the guide offers information on setting up your own model, including building a model from scratch or alternatively using Deltares HydroMT model building tools, which are open source.","category":"page"},{"location":"model_docs/lateral/kinwave/#kin_wave","page":"Kinematic wave","title":"Kinematic wave","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/#Surface-routing","page":"Kinematic wave","title":"Surface routing","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"The main flow routing scheme available in Wflow.jl is the kinematic wave approach for channel and overland flow, assuming that water flow is mostly controlled by topography. The kinematic wave equations are (Chow, 1988):","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" dfracpartial Qpartial x + dfracpartial Apartial t = q \n A = alpha Q^beta","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"These equations can then be combined as a function of streamflow only:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" dfracpartial Qpartial x + alpha beta Q^beta - 1 dfracpartial Qpartial t = q","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"Here SIbQm^3 s^-1 is the surface runoff in the kinematic wave, SIbxm is the length of the runoff pathway, SIbAm is the cross-section area of the runoff pathway, SIbts is the integration timestep and alpha and beta are unitless coefficients.","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"These equations are solved with a nonlinear scheme using Newton's method and can also be iterated depending on the model space and time resolution. By default, the iterations are performed until a stable solution is reached (epsilon 10^-12). For larger models, the number of iterations can also be fixed for to a specific sub-timestep (in seconds) for both overland and channel flows to improve simulation time. To enable (fixed or not) iterations of the kinematic wave the following lines can be inserted in the TOML file of the model:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"[model]\n# Enable iterations of the kinematic wave\nkin_wave_iteration = true\n# Fixed sub-timestep for iterations of channel flow (river cells)\nkw_river_tstep = 900\n# Fixed sub-timestep for iterations of overland flow (land cells)\nkw_land_tstep = 3600","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"The alpha parameter of the kinematic wave is fixed. To estimate the wetted perimeter for the calculation of the alpha parameter a bankfull river depth map (default value is SI10m) for the river can be provided as follows:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"[input.lateral.river]\nbankfull_depth = \"wflow_riverdepth\"","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"The wetted perimeter of the river is based on half bankfull river depth. For the land part the wetted perimeter is based on the flow width.","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"Simplified reservoir and lake models can be included as part of the river kinematic wave network.","category":"page"},{"location":"model_docs/lateral/kinwave/#Inflow","page":"Kinematic wave","title":"Inflow","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"External water (supply/abstraction) inflow SIbm^3 s^-1 can be added to the kinematic wave for surface water routing, as a cyclic parameter or as part of forcing (see also Input section).","category":"page"},{"location":"model_docs/lateral/kinwave/#Abstractions","page":"Kinematic wave","title":"Abstractions","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"Abstractions from the river through the variable abstraction SIbm^3 s^-1 are possible when water demand and allocation is computed. The variable abstraction is set from the water demand and allocation module each time step. The abstraction is divided by the length of the runoff pathway and subtracted from the lateral inflow of the kinematic wave routing scheme for river flow.","category":"page"},{"location":"model_docs/lateral/kinwave/#Subsurface-flow-routing","page":"Kinematic wave","title":"Subsurface flow routing","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"In the SBM model the kinematic wave approach is used to route subsurface flow laterally. Different vertical hydraulic conductivity depth profiles are possible as part of the vertical SBM concept, and these profiles (after unit conversion) are also used to compute lateral subsurface flow. The following profiles (see SBM for a detailed description) are available:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"exponential (default)\nexponential_constant\nlayered\nlayered_exponential ","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"For the profiles exponential and exponential_constant, the saturated store S is drained laterally by saturated downslope subsurface flow for a slope with width SIbwm according to:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" Q = K_0tan(beta)wbegincases\n frac1fleft(e^-fz_i-e^-fsubtextzexpright) + \n e^-fsubtextzexp(z_t-subtextzexp) textif z_i subtextzexp\n \n e^-fsubtextzexp(z_t - z_i) textif z_i ge subtextzexp\n endcases","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" where beta is element slope angle, SIbQm^3 d^-1 is subsurface flow, SIbK_0m d^-1 is the saturated hydraulic conductivity at the soil surface, SIbz_im is the water table depth, SIbz_tm is the total soil depth, SIbfm^-1 is a scaling parameter that controls the decrease of K_0 with depth and SIbsubtextzexpm is the depth from soil surface for which the exponential decline of K_0 is valid. For the exponential profile, subtextzexp is equal to z_t.","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"Combining with the following continuity equation:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" (theta_s-theta_r)wfracpartial hpartial t = -fracpartial Qpartial x + wr","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"where SIbhm is the water table height, SIbxm is the distance downslope, and SIbrm d^-1 is the net input rate to the saturated store. Substituting for h (fracpartial Qpartial h), gives:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" fracpartial Qpartial t = -cfracpartial Qpartial x + cwr","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"where celerity c is calculated as follows:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" c = fracK_0 tan(beta)theta_s-theta_rbegincases\n e^-fz_i\n + e^-fsubtextzexp textif z_i subtextzexp\n \n e^-fsubtextzexp textif z_i ge subtextzexp\n endcases","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"For the layered and layered_exponential profiles the equivalent horizontal hydraulic conductivity SIbK_hm d^-1 is calculated for water table height SIbh = z_t-z_im and lateral subsurface flow is calculated as follows:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" Q = K_h h tan(beta) w","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"and celerity c is given by:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":" c = fracK_h tan(beta)theta_s-theta_r","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"The kinematic wave equation for lateral subsurface flow is solved iteratively using Newton's method.","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"note: Note\nFor the lateral subsurface flow kinematic wave the model timestep is not adjusted. For certain model timestep and model grid size combinations this may result in loss of accuracy.","category":"page"},{"location":"model_docs/lateral/kinwave/#Multi-Threading","page":"Kinematic wave","title":"Multi-Threading","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"The kinematic wave calculations for surface - and subsurface flow routing can be executed in parallel using multiple threads. In the model section of the TOML file, a minimum stream order can be provided to define subbasins for the river (default is 6) and land domain (default is 5). Subbasins are created at all confluences where each branch has a minimal stream order. Based on the subbasins a directed acyclic graph is created that controls the order of execution and which subbasins can run in parallel.","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"[model]\nmin_streamorder_river = 5 # minimum stream order to delineate subbasins for river domain, default is 6\nmin_streamorder_land = 4 # minimum stream order to delineate subbasins for land domain, default is 5","category":"page"},{"location":"model_docs/lateral/kinwave/#Subcatchment-flow","page":"Kinematic wave","title":"Subcatchment flow","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"Normally the the kinematic wave is continuous throughout the model. By using the pits entry in the model and input sections of the TOML file all flow is at the subcatchment only (upstream of the pit locations, defined by the netCDF variable wflow_pits in the example below) and no flow is transferred from one subcatchment to another. This can be convenient when connecting the result of the model to a water allocation model such as Ribasim.","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"[input]\n# these are not directly part of the model\npits = \"wflow_pits\"\n\n[model]\npits = true","category":"page"},{"location":"model_docs/lateral/kinwave/#Limitations","page":"Kinematic wave","title":"Limitations","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"The kinematic wave approach for channel, overland and lateral subsurface flow, assumes that the topography controls water flow mostly. This assumption holds for steep terrain, but in less steep terrain the hydraulic gradient is likely not equal to the surface slope (subsurface flow), or pressure differences and inertial momentum cannot be neglected (channel and overland flow). In addition, while the kinematic wave equations are solved with a nonlinear scheme using Newton's method (Chow, 1988), other model equations are solved through a simple explicit scheme. In summary the following limitations apply:","category":"page"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"Channel flow, and to a lesser degree overland flow, may be unrealistic in terrain that is not steep, and where pressure forces and inertial momentum are important.\nThe lateral movement of subsurface flow may be very wrong in terrain that is not steep.","category":"page"},{"location":"model_docs/lateral/kinwave/#External-inflows","page":"Kinematic wave","title":"External inflows","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"External inflows, for example water supply or abstractions, can be added to the kinematic wave via the inflow variable. For this, the user can supply a 2D map of the inflow, as a cyclic parameter or as part of forcing (see also Input section). These inflows are added or abstracted from the upstream inflow qin before running the kinematic wave to solve the impact on resulting q. In case of a negative inflow (abstractions), a minimum of zero is applied to the upstream flow qin.","category":"page"},{"location":"model_docs/lateral/kinwave/#References","page":"Kinematic wave","title":"References","text":"","category":"section"},{"location":"model_docs/lateral/kinwave/","page":"Kinematic wave","title":"Kinematic wave","text":"Chow, V., Maidment, D. and Mays, L., 1988, Applied Hydrology. McGraw-Hill Book Company, New York.","category":"page"},{"location":"model_docs/structures/#Julia-structures","page":"Julia structures","title":"Julia structures","text":"","category":"section"},{"location":"model_docs/structures/#Model","page":"Julia structures","title":"Model","text":"","category":"section"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"Below the composite type that represents all different aspects of a Wflow.Model, such as the network, parameters, clock, model type, configuration and input and output.","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"struct Model{N,L,V,R,W,T}\n config::Config # all configuration options\n network::N # connectivity information, directed graph\n lateral::L # lateral model that holds lateral state, moves along network\n vertical::V # vertical model that holds vertical state, independent of each other\n clock::Clock # to keep track of simulation time\n reader::R # provides the model with dynamic input\n writer::W # writes model output\n type::T # model type\nend","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"The lateral field of the struct Model can contain different lateral concepts. For each wflow model these different lateral concepts are mapped through the use of a NamedTuple. The vertical field of the struct Model always contains one vertical concept, for example the SBM or HBV vertical concept.","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"Below an example how lateral concepts are mapped for the SBM model through a NamedTuple:","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"(subsurface = ssf, land = olf, river = rf)","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"The subsurface part is mapped to the lateral subsurface flow kinematic wave concept, the land part is mapped the overland flow kinematic wave concept and the river part is mapped to the river flow kinematic wave concept. Knowledge of this specific mapping is required to understand and correctly set input, output and state variables in the TOML configuration file, see also Config and TOML. This mapping is described in more detail for each model in the section Models. Also the struct of each mapped concept is provided, so one can check the internal variables in the code. These structs are defined as a parametric composite type, with type parameters between curly braces after the struct name. See also the next paragraph Vertical and lateral models for a more detailed description.","category":"page"},{"location":"model_docs/structures/#Vertical-and-lateral-models","page":"Julia structures","title":"Vertical and lateral models","text":"","category":"section"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"The different model concepts used in wflow are defined as parametric composite types. For example the vertical SBM concept is defined as follows: struct SBM{T,N,M}. T, N and M between curly braces after the struct name refer to type parameters, for more information about type parameters you can check out Type parameters. Since these parameters can be of any type, it is possible to declare an unlimited number of composite types. The type parameters are used to set the type of struct fields, below an example with a part of the SBM struct:","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"@get_units @with_kw struct SBM{T,N,M}\n # Model time step [s]\n dt::T | \"s\"\n # Maximum number of soil layers\n maxlayers::Int | \"-\"\n # number of cells\n n::Int | \"-\"\n # Number of soil layers\n nlayers::Vector{Int} | \"-\"\n # Number of unsaturated soil layers\n n_unsatlayers::Vector{Int} | \"-\"\n # Fraction of river [-]\n riverfrac::Vector{T} | \"-\"\n # Saturated water content (porosity) [mm mm⁻¹]\n theta_s::Vector{T} | \"mm mm-1\"\n # Residual water content [mm mm⁻¹]\n theta_r::Vector{T} | \"mm mm-1\"\n # Vertical hydraulic conductivity [mm Δt⁻¹] at soil surface\n kv_0::Vector{T} | \"mm dt-1\"\n # Muliplication factor [-] applied to kv_z (vertical flow)\n kvfrac::Vector{SVector{N,T}} | \"-\"","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"The type parameter T is used in wflow as a subtype of AbstractFloat, allowing to store fields with a certain floating point precision (e.g. Float64 or Float32) in a flexible way. N refers to the maximum number of soil layers of the SBM soil column, and M refers to the maximum number of soil layers + 1. See also part of the following instance of SBM:","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"sbm = SBM{Float,maxlayers,maxlayers + 1}(\n dt = tosecond(dt),\n maxlayers = maxlayers,\n n = n,","category":"page"},{"location":"model_docs/structures/","page":"Julia structures","title":"Julia structures","text":"For the other model concepts, we refer to the code to check these type parameters.","category":"page"},{"location":"model_docs/vertical/hbv/#vert_hbv","page":"HBV","title":"HBV","text":"","category":"section"},{"location":"model_docs/vertical/hbv/#Introduction","page":"HBV","title":"Introduction","text":"","category":"section"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"This section describes the different vertical processes available as part of the vertical HBV concept. This concept is part of the wflow_hbv model.","category":"page"},{"location":"model_docs/vertical/hbv/#Snow","page":"HBV","title":"Snow","text":"","category":"section"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The snow model is described in Snow and glaciers.","category":"page"},{"location":"model_docs/vertical/hbv/#Glaciers","page":"HBV","title":"Glaciers","text":"","category":"section"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Glacier processes are described in Snow and glaciers. Glacier modelling is enabled by specifying the following in the TOML file:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"[model]\nglacier = true","category":"page"},{"location":"model_docs/vertical/hbv/#Potential-Evaporation","page":"HBV","title":"Potential Evaporation","text":"","category":"section"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The cevpf model parameter is used to adjust the potential evaporation based on land use. In the original HBV version cevpfo is used, a factor for forest land use only.","category":"page"},{"location":"model_docs/vertical/hbv/#Interception","page":"HBV","title":"Interception","text":"","category":"section"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"For interception storage a single icf parameter is used according to the land use. In this implementation interception evaporation is subtracted to ensure total evaporation does not exceed potential evaporation. From this storage evaporation equal to the potential evaporation rate will occur as long as water is available, even if it is stored as snow. All water enters this store first, there is no concept of free throughfall (e.g. through gaps in the canopy). In the model a running water budget is kept of the interception store:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The available storage (icf- actual storage) is filled with the water coming from the snow routine (Q_in)\nAny surplus water now becomes the new Q_in\nInterception evaporation is determined as the minimum of the current interception storage and the potential evaporation","category":"page"},{"location":"model_docs/vertical/hbv/#The-soil-routine","page":"HBV","title":"The soil routine","text":"","category":"section"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The incoming water from the snow and interception routines, Q_in, is available for infiltration in the soil routine. The soil layer has a limited capacity, fc, to hold soil water, which means if fc is exceeded the abundant water cannot infiltrate and, consequently, becomes directly available for runoff.","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":" Q_dr=max((SM+Q_infc)00)","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"where Q_dr is the abundant soil water (also referred to as direct runoff) and SM is the soil moisture content. Consequently, the net amount of water that infiltrates into the soil, I_net, equals:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"I_net = Q_in Q_dr","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Part of the infiltrating water, I_net, will runoff through the soil layer (seepage). This runoff volume, SP, is related to the soil moisture content, SM, through the following power relation:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"SP = left(fracSMfcright)^beta I_net","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"where beta is an empirically based parameter. Application of this equation implies that the amount of seepage water increases with increasing soil moisture content. The fraction of the infiltrating water which does not runoff, I_netSP, is added to the available amount of soil moisture, SM. The beta parameter affects the amount of supply to the soil moisture reservoir that is transferred to the quick response reservoir. Values of beta vary generally between 1 and 3. Larger values of beta reduce runoff and indicate a higher absorption capacity of the soil.","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"(Image: hbv-soilmoist.png)","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Schematic view of the soil moisture routine","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"A percentage of the soil moisture will evaporate. This percentage is related to the potential evaporation and the available amount of soil moisture:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":" E_a = fracSMT_m E_p SMT_m \n E_a = E_p SM geq T_m","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"where E_a is the actual evaporation, E_p is the potential evaporation and T_m (leq fc) is a user defined threshold, above which the actual evaporation equals the potential evaporation. T_m is defined as LP * fc in which LP is a soil dependent evaporation factor (LPleq 1).","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"In the original model (Bergström, 1992), a correction to E_a is applied in case of interception. If E_a from the soil moisture storage plus E_i exceeds ET_pE_i (E_i = interception evaporation) then the exceeding part is multiplied by a factor (1-e_red), where the parameter e_red varies between 0 and 1. This correction is not present in the wflow_hbv model.","category":"page"},{"location":"model_docs/vertical/hbv/#The-runoff-response-routine","page":"HBV","title":"The runoff response routine","text":"","category":"section"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The volume of water which becomes available for runoff, S_dr+SP, is transferred to the runoff response routine. In this routine the runoff delay is simulated through the use of a number of linear reservoirs.","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Two linear reservoirs are defined to simulate the different runoff processes: the upper zone (generating quick runoff and interflow) and the lower zone (generating slow runoff). The available runoff water from the soil routine (i.e. direct runoff, S_dr, and seepage, SP) in principle ends up in the lower zone, unless the percolation threshold, PERC, is exceeded, in which case the redundant water ends up in the upper zone:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Delta V_LZ=min(PERC(S_dr+SP)) \nDelta V_UZ=max(00(S_dr+SPPERC))","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"where V_UZ is the content of the upper zone, V_LZ is the content of the lower zone.","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Capillary flow from the upper zone to the soil moisture reservoir is modeled according to:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Q_cf=cflux (fcSM)fc","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"where cflux is the maximum capillary flux [mm day^-1].","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The upper zone generates quick runoff (Q_q) using:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Q_q=K UZ^(1+alpha)","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"where K is the upper zone recession coefficient, and alpha determines the amount of non-linearity. Within HBV-96, the value of K is determined from three other parameters: alpha, KHQ, and HQ [mm day^-1]. The value of HQ represents an outflow rate of the upper zone for which the recession rate is equal to KHQ. If we define UZ_HQ to be the content of the upper zone at outflow rate HQ we can write the following equation:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":" HQ=K cdot UZ^(1+alpha) = KHQ cdot UZ_HQ","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"If we eliminate UZ_HQ we obtain:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":" HQ = K left(fracHQKHQright)^(1+alpha)","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Rewriting for K results in:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":" K = KQH^(1alpha) HQ^alpha","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The lower zone is a linear reservoir, which means the rate of slow runoff, Q_LZ, which leaves this zone during one time step equals:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Q_LZ = K_LZ V_LZ","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"where K_LZ is the reservoir constant.","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The upper zone is also a linear reservoir, but it is slightly more complicated than the lower zone because it is divided into two zones: a lower part in which interflow is generated and an upper part in which quick flow is generated.","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"(Image: hbv-upper)","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Schematic view of the upper zone","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"If the total water content of the upper zone, V_UZ is lower than a threshold UZ1, the upper zone only generates interflow. On the other hand, if V_UZ exceeds UZ1, part of the upper zone water will runoff as quick flow:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":" Q_i = K_i min(UZ1V_uz)\n Q_q = K_q max((V_UZUZ1)00)","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Where Q_i is the amount of generated interflow in one time step, Q_q is the amount of generated quick flow in one time step and K_i and K_q are reservoir constants for interflow and quick flow respectively.","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The total runoff rate, Q, is equal to the sum of the three different runoff components:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":" Q = Q_LZ+Q_i+Q_q","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"The runoff behavior in the runoff response routine is controlled by two threshold values P_m and UZ1 in combination with three reservoir parameters, K_LZ, K_i and K_q.","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"In order to represent the differences in delay times between the three runoff components, the reservoir constants have to meet the following requirement:","category":"page"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":" K_LZK_iK_q","category":"page"},{"location":"model_docs/vertical/hbv/#References","page":"HBV","title":"References","text":"","category":"section"},{"location":"model_docs/vertical/hbv/","page":"HBV","title":"HBV","text":"Bergström, S., 1992, The HBV model–its structure and applications, SMHI Reports RH 4, Norrköping.","category":"page"},{"location":"intro/use_cases/#Case-studies","page":"Case studies","title":"Case studies","text":"","category":"section"},{"location":"intro/use_cases/#case_rws","page":"Case studies","title":"Wflow models for the Meuse and Rhine","text":"","category":"section"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"Reliable hydrological models for the Rhine and the Meuse river basins are necessary for short-term forecasting of river flows and long-term predictions for strategic water management planning. In collaboration with Rijkswaterstaat, Deltares is developing a new line of models for the Rhine and the Meuse basins. The models will be used for forecasting and to estimate the impact of climate change on water resources and extreme streamflow. In the model development, we aim to improve hydrological predictions by including relevant processes in the model schematization. The modularity of the wflow framework is ideal for this as we can easily evaluate the combination of different vertical and lateral model components. For example, the local inertial routing for river and overland flow enables us to consider retention of water in the floodplains, which is likely to improve extreme streamflow predictions.","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"(Image: fig_case_rws)","category":"page"},{"location":"intro/use_cases/#case_flifs","page":"Case studies","title":"Operational flood forecasting in Australia","text":"","category":"section"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"In Australia, there was a need for high-resolution, fast and accurate rainfall-runoff models to provide boundary conditions for a fast and detailed flood inundation model (SFINCS). The domain of the flood model covers the entire North and East Coast of Australia. Although many gauging stations are available to provide real-time information, many rivers are not covered. For these locations, wflow_sbm models are used to provide this real-time information. Additionally, these models are used to provide projections for potential future scenarios. Using the HydroMT library, all wflow_sbm models were automatically built. The high level of flexibility in spatial and temporal resolution, combined with the physics-based nature of the concept, makes Wflow_sbm particularly suitable for ungauged basins. Furthermore, the model is detailed and computationally efficient enough for coupling with the fast flood inundation model SFINCS.","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"(Image: fig_case_flifs)","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"The results of this proof of concept are very promising. Technically, we were able to quickly set up the wflow_sbm models, couple them to the flood inundation models (SFINCS), and run the models operationally under the Delft-FEWS platform. Model validation was conducted for two basins by comparing the results of Wflow_sbm against observations and the results of calibrated URBS models. This validation demonstrated that the uncalibrated Wflow_sbm model results were already quite satisfactory, especially given the complex nature of these basins, which include several small and large reservoirs. We could also show the potential for further calibration by adjusting the KsatHorFrac parameter.","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"Reference: De Kleermaeker, S., Leijnse, T., Morales, Y., Druery, C., Maguire, S.,","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"Developing a real-time data and modelling framework for operational flood inundation forecasting in Australia. In Hydrology & Water Resources Symposium 2022 (HWRS 2022): The Past, the Present, the Future. Engineers Australia. https://search.informit.org/doi/10.3316/informit.916755150845355","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"(Image: fig_case_flifs)","category":"page"},{"location":"intro/use_cases/#case_mfa","page":"Case studies","title":"Simulating plastic transport in Thailand","text":"","category":"section"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"For the Pollution Control Board of the Government of Thailand and the World Bank, we supported a material flow analysis of plastics in Thailand using wflow. Plastic pollution is a growing global issue. Plastic waste enters rivers and is transported to the ocean where it persists and threatens the health of the ocean, seas and coasts. The initial movement of plastic waste is in many cases triggered by runoff from (heavy) rainfall and transported by water flow towards small streams and rivers. Therefore there is strong relation to rainfall-runoff processes, which can be modeled using high-resolution rainfall-runoff models.","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"In this study we applied the wflow_sbm model in combination with a fate-and-transport and water quality model (DelWaq) to simulate the movement of plastics through five large river basins and on three island and coastal zones (Krabi, Phuket, and Ko Samui; see screenshot of the model below) in Thailand. Together with our partners Panya Consultants and HII, we were able to identify hotspots of plastic pollution, estimate how much plastic waste would end up in the Gulf of Thailand and recommend priority areas for reducing plastic waste reaching the sea.","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"(Image: fig_case_mfa)","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"The wflow_sbm models for the five large basins were calibrated. The presence of large dams and reservoirs complicated calibration, but with the input for the dam operation, the model performance for these basins could be largely improved. The figure below shows the calibrated model results for the Chao Phraya, just upstream of Bangkok. The input from the hydrological wflow_sbm model was used as input for the fate and transport model to assess the amount of plastic transported to the ocean.","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"(Image: fig_case_mfa)","category":"page"},{"location":"intro/use_cases/","page":"Case studies","title":"Case studies","text":"Link to World Bank report: https://www.worldbank.org/en/country/thailand/publication/plastic-waste-material-flow-analysis-for-thailand","category":"page"},{"location":"model_docs/vertical/sbm/#vert_sbm","page":"SBM","title":"SBM","text":"","category":"section"},{"location":"model_docs/vertical/sbm/#Introduction","page":"SBM","title":"Introduction","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The SBM vertical concept has its roots in the Topog_SBM model but has had considerable changes over time. The main differences are:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The unsaturated zone can be split-up in different layers\nThe addition of evapotranspiration losses\nThe addition of a capillary rise","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The sections below describe the working of the SBM vertical concept in more detail.","category":"page"},{"location":"model_docs/vertical/sbm/#Precipitation","page":"SBM","title":"Precipitation","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The division between solid and liquid precipitation (snowfall and rainfall, respectively) is performed based on the air temperature. If the temperature is below a threshold temperature (tt), precipitation will fall as snow. An interval parameter (tti) defines the range over which precipitation is partly falling as snow, and partly as rain. Snowfall is added to the snowpack, where it is subject to melting and refreezing (see the section on snow and glaciers). The amount of rainfall is subject to interception, and ultimately becomes available for evaporation and/or soil processes.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"(Image: snowfall)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Division between snow and precipitation based on the threshold temperature","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"# Figure created using python: # hide\n# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-snowfall_fig-py # hide","category":"page"},{"location":"model_docs/vertical/sbm/#interception","page":"SBM","title":"Rainfall interception","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Two different interception models are available: the analytical Gash model, and the modified Rutter model. The simulation timestep defines which interception model is used, where daily (or larger) timesteps use the Gash model, and timesteps smaller than daily use the modified Rutter model.","category":"page"},{"location":"model_docs/vertical/sbm/#The-analytical-(Gash)-model-(Gash,-1979)","page":"SBM","title":"The analytical (Gash) model (Gash, 1979)","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The analytical model of rainfall interception is based on Rutter's numerical model. Simplifications allow the model to be applied on a daily basis, although a storm-based approach will yield better results in situations with more than one storm per day. The amount of water needed to completely saturate the canopy is defined as:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"P=frac-overlineRSoverlineE_wlogleft1-fracoverlineE_woverlineR(1-p-p_t)^-1right","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"where overlineR is the average precipitation intensity on a saturated canopy and overlineE_w the average evaporation from the wet canopy and with the vegetation parameters S, p and p_t as defined previously. The model uses a series of expressions to calculate the interception loss during different phases of a storm. An analytical integration of the total evaporation and rainfall under saturated canopy conditions is performed for each storm to determine average values of overlineE_w and overlineR. The total evaporation from the canopy (the total interception loss) is calculated as the sum of the components listed in the table below. Interception losses from the stems are calculated for days with Pgeq S_tp_t. p_t and S_t are small and neglected.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Table: Formulation of the components of interception loss according to Gash:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Components Interception loss\nFor m small storms (P_gP_g) (1-p-p_t)sum_j=1^mP_gj\nWetting up the canopy in n large storms (P_ggeqP_g) n(1-p-p_t)P_g-nS\nEvaporation from saturated canopy during rainfall overlineEoverlineRsum_j=1^n(P_gj-P_g)\nEvaporation after rainfall ceases for n large storms nS\nEvaporation from trunks in q storms that fill the trunk storage qS_t\nEvaporation from trunks in m+n-q storms that do not fill the trunk storage p_tsum_j=1^m+n-qP_gj","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"In applying the analytical model, saturated conditions are assumed to occur when the hourly rainfall exceeds a certain threshold. Often a threshold of 0.5 mm/hr is used. overlineR is calculated for all hours when the rainfall exceeds the threshold to give an estimate of the mean rainfall rate onto a saturated canopy.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Gash (1979) has shown that in a regression of interception loss on rainfall (on a storm basis) the regression coefficient should equal to overlineE_woverlineR. Assuming that neither overlineE_w nor overlineR vary considerably in time, overlineE_w can be estimated in this way from overlineR in the absence of above-canopy climatic observations. Values derived in this way generally tend to be (much) higher than those calculated with the penman-monteith equation.","category":"page"},{"location":"model_docs/vertical/sbm/#The-modified-rutter-model","page":"SBM","title":"The modified rutter model","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"For sub daily timesteps the interception is calculated using a simplification of the Rutter model. The simplified model is solved explicitly and does not take drainage from the canopy into account. The amount of stemflow is taken as a fraction (0.1 * canopygapfraction) of the precipitation. Throughfall equals to the amount of water that cannot be stored by the canopy, plus the rainfall that is not captured by the canopy. Water can evaporate from the canopy storage, taken as the minimum between potential evaporation and the current storage. The \"left-over\" potential evaporation (if any) is returned as output.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Wflow.rainfall_interception_modrut","category":"page"},{"location":"model_docs/vertical/sbm/#Interception-parameters-from-LAI","page":"SBM","title":"Interception parameters from LAI","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The SBM concept can determine the interception parameters from leaf area index (LAI) climatology. In order to switch this on you must define this cyclic parameter in the TOML file, the parameter is read from path_static, as follows:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[input]\npath_forcing = \"data/forcing-moselle.nc\"\npath_static = \"data/staticmaps-moselle.nc\"\n\ncyclic = [\"vertical.leaf_area_index\"]","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Furthermore, these additional parameters are required:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Specific leaf storage (sl SIbmm)\nStorage woody part of vegetation (swood SIbmm)\nExtinction coefficient (kext SIb-)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Here it is assumed that cmax SIbmm (leaves) (canopy storage capacity for the leaves only) relates linearly with LAI (c.f. Van Dijk and Bruijnzeel 2001). This is done via the sl. sl can be determined through a lookup table with land cover based on literature (Pitman 1989, Lui 1998). Next the cmax (leaves) is determined using:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" c_max(mathrmleaves) = mathrmsl cdot mathrmLAI","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"To get to total storage (cmax) the woody part of the vegetation also needs to be added. As for sl, the storage of the woody part swood can also be related to land cover (lookup table).","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The canopy gap fraction is determined using the extinction coefficient kext (van Dijk and Bruijnzeel 2001):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" mathrmcanopygapfraction = exp(-subtextkext cdot mathrmLAI)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The extinction coefficient kext can be related to land cover.","category":"page"},{"location":"model_docs/vertical/sbm/#evap","page":"SBM","title":"Evaporation","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The wflow_sbm model assumes the input to be potential reference evapotranspiration. A crop coefficient (kc, set to 1 by default) is used to convert the potential evapotranspiration rate of a reference crop fully covering the soil to the potential evapotranspiration rate of vegetation (natural and agricultural) fully covering the soil. The crop coefficient kc of wflow_sbm is used for a surface completely covered by vegetation, and does not include the effect of growing stages of vegetation and soil cover. These effects are handled separately through the use of the canopy gap fraction. ","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"It is assumed that the potential evaporation rate of intercepted water by vegetation is equal to the potential evapotranspiration rate of vegetation (fully covering the soil) multiplied by the canopy fraction. The potential evapotranspiration rate left over after interception is available for transpiration. For potential open water evaporation (river and water bodies) the potential reference evapotranspiration rate is used (multipled by the river fraction riverfrac, and open water fraction waterfrac). Also for potential soil evaporation the potential reference evapotranspiration rate is used, multiplied by the canopy gap fraction corrected by the sum of total water fraction (riverfrac and waterfrac) and the fraction covered by a glacier (glacierfrac).","category":"page"},{"location":"model_docs/vertical/sbm/#Bare-soil-evaporation","page":"SBM","title":"Bare soil evaporation","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"If there is only one soil layer present in the wflow_sbm model, the bare soil evaporation is scaled according to the wetness of the soil layer. The fraction of bare soil is assumed to be equal to the fraction not covered by the canopy (canopygapfraction) corrected by the total water fraction. When the soil is fully saturated, evaporation is set to equal the potential reference evaporation. When the soil is not fully saturated, actual evaporation decreases linearly with decreasing soil moisture values, as indicated by the figure below.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"(Image: soil_evap)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Evaporation reduction as function of available soil moisture","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"# Figure created using python: # hide\n# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"When more soil layers are present, soil evaporation is only provided from the upper soil layer, and soil evaporation is split in evaporation from the unsaturated store and evaporation from the saturated store. Water is first evaporated from the unsaturated store. The remaining potential soil evaporation can be used for evaporation from the saturated store, but only when the water table is present in the upper soil layer. Both the evaporation from the unsaturated store and the evaporation from the saturated store are limited by the minimum of the remaining potential soil evaporation and the available water in the unsaturated/saturated zone of the upper soil layer. Also for multiple soil layers, the evaporation (both unsaturated and saturated) decreases linearly with decreasing water availability.","category":"page"},{"location":"model_docs/vertical/sbm/#Transpiration","page":"SBM","title":"Transpiration","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The maximum possible root water extraction rate for each soil layer is determined by partitioning the potential transpiration rate T_p based on the fraction of the total root length (rootfraction SIb-) in each soil layer. A root water uptake reduction model is used to calculate a reduction coefficient as a function of soil water pressure, that may reduce the maximum possible root water extraction rate. The root water uptake reduction model is based on the concept proposed by Feddes et al. (1978). This concept defines a reduction coefficient SIbalpha- as a function of soil water pressure (SIbhcm). Four different levels of h are defined: h1, h2, h3 and h4. h1 represents anoxic moisture conditions, h2 represents field capacity, h3 represents the point of critical soil moisture content (onset of drought stress), and h4 represents the wilting point. The value of h3 is a function of the potential transpiration rate, between SIb1mm d^-1 and SIb5mm d^-1. If T_p le SIb1mm d^-1, h3 is set equal to h3_low (input model parameter). If T_p ge SIb5mm d^-1, h3 is set equal to h3_high (input model parameter). For T_p values between SIb1mm d^-1 and SIb5mm d^-1, the value of h3 is linearly related to T_p (between h3_low and h3_high). Besides model parameters h3_high and h3_low, the critical pressure heads h1, h2 and h4 can be defined as input to the model.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The current soil water pressure is determined following the concept defined by Brooks and Corey (1964):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" fractheta-theta_rtheta_s-theta_r = minleft1 left(frach_bhright)^lambdaright","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"where SIbhcm is the pressure head, SIbh_bcm is the air entry pressure head, and theta, theta_s, theta_r and lambda as previously defined.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Whenever the current soil water pressure drops below h4, the root water uptake is set to zero. The root water uptake is at ideal conditions whenever the soil water pressure is above h3, with a linear transition between h3 and h4. The assumption that very wet conditions do not affect root water uptake too much is probably generally applicable to natural vegetation. For crops this assumption is not valid and in this case root water uptake above h1 should be set to zero (oxygen deficit) and between h1 and h2 root water uptake is limited. This is possible by setting the input model parameter alpha_h1 at 0 (default is 1).","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"(Image: soil_rootwateruptake)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Root water uptake reduction coefficient as a function of soil water pressure","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"# Figure created using python: # hide\n# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The maximum allowed root water extraction from each soil layer in the unsaturated zone is determined based on the fraction of each soil layer in the unsaturated zone that is above the rooting depth (availcap) and the unsaturated storage usld, see conceptual figure below. This is implemented using the following code (i refers to the index of the vector that contains all active cells within the spatial model domain and k refers to the soil layer (from top to bottom) in the unsaturated zone):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" # availcap is fraction of soil layer containing roots\n # if `ust` is `true`, the whole unsaturated store is available for transpiration\n if ust\n availcap = usld[k] * 0.99\n else\n availcap =\n min(1.0, max(0.0, (sbm.rootingdepth[i] - sbm.sumlayers[i][k]) / usl[k]))\n end\n maxextr = usld[k] * availcap","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"(Image: soil_unsatevap)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Conceptual overview of how maxextr depends on rooting depth and water table depth","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"# Figure created using python: # hide\n# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"note: Note\nWhen whole_ust_available is set to true in the TOML file, almost the complete unsaturated storage (99%) is available for transpiration, independent of the rootingdepth.[model]\nwhole_ust_available = true","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The computation of transpiration from the saturated store depends on the water table depth, rooting depth, the reduction coefficient alpha, the fraction of wet roots and the rootfraction below the water table. The fraction of wet roots is determined using a sigmoid fuction (see figure below). The parameter rootdistpar defines the sharpness of the transition between fully wet and fully dry roots. If the water table depth is equal to or lower than the rooting depth, the remaining potential transpiration is used based on the potential transpiration and actual transpiration in the unsaturated zone. The remaining potential transpiration is multiplied by the wet roots fraction and the reduction coefficient (and limited by the available water in saturated zone) to get the transpiration from the saturated part of the soil. If the water table depth intersects the rooting depth, the potential transpiration is multiplied by the remaining rootfraction (below the water table), wet roots fraction and the reduction coefficient (and limited by the available water in saturated zone) to get the transpiration from the saturated part of the soil. This is implemented using the following code (i refers to the index of the vector that contains all active cells within the spatial model domain):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" # transpiration from saturated store\n wetroots = scurve(sbm.zi[i], sbm.rootingdepth[i], Float(1.0), sbm.rootdistpar[i])\n alpha = rwu_reduction_feddes(\n Float(0.0),\n sbm.h1[i],\n sbm.h2[i],\n sbm.h3[i],\n sbm.h4[i],\n sbm.alpha_h1[i],\n )\n # include remaining root fraction if rooting depth is below water table zi\n if sbm.zi[i] >= sbm.rootingdepth[i]\n f_roots = wetroots\n restevap = sbm.pottrans[i] - actevapustore\n else\n f_roots = wetroots * (1.0 - rootfraction_unsat)\n restevap = sbm.pottrans[i]\n end\n actevapsat = min(restevap * f_roots * alpha, satwaterdepth)\n satwaterdepth = satwaterdepth - actevapsat","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"(Image: soil_wetroots)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Amount of wet roots and the effect of the rootdistpar parameter","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"# Figure created using python: # hide\n# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide","category":"page"},{"location":"model_docs/vertical/sbm/#snow","page":"SBM","title":"Snow and glaciers","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The snow and glacier model is described in Snow and glaciers. Both options can be enabled by specifying the following in the TOML file:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[model]\nsnow = true\nglacier = true","category":"page"},{"location":"model_docs/vertical/sbm/#soil","page":"SBM","title":"Soil processes","text":"","category":"section"},{"location":"model_docs/vertical/sbm/#The-SBM-soil-water-accounting-scheme","page":"SBM","title":"The SBM soil water accounting scheme","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"A detailed description of the Topog\\_SBM model has been given by Vertessy (1999). Briefly: the soil is considered as a bucket with a certain depth (SIbz_tmm), divided into a saturated store (SIbSmm) and an unsaturated store (SIbUmm). The top of the S store forms a pseudo-water table at depth SIbz_imm such that the value of S at any time is given by:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" S=(z_t-z_i)(theta_s-theta_r)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"where SIbtheta_s- and SIbtheta_r- are the saturated and residual soil water contents, respectively.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The unsaturated store U is subdivided into storage (SIbU_smm) and deficit (SIbU_dm):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" U_d=(theta_s-theta_r)z_i-U\n U_s=U-U_d","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The saturation deficit (SIbS_dmm) for the soil profile as a whole is defined as:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" S_d=(theta_s-theta_r)z_t-S","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"All infiltrating water that enters the U store first. The unsaturated layer can be split-up in different layers, by providing the thickness SIbmm of the layers in the TOML file. The following example specifies three layers (from top to bottom) of 100, 300 and 800 mm:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[model]\nthicknesslayers = [100, 300, 800]","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The code checks for each grid cell the specified layers against the soilthickness SIbmm, and adds or removes (partly) layer(s) based on the soilthickness.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" Assuming a unit head gradient, the transfer of water (SIbmathrmstmm s^-1) from a SIbUmm store layer is controlled by the saturated hydraulic conductivity SIbsubtextKsatmm s^-1 at depth SIbzmm (bottom layer) or SIbz_imm, the effective saturation degree of the layer, and a Brooks-Corey power coefficient (parameter c) based on the pore size distribution index lambda (Brooks and Corey, 1964):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" mathrmst=subtextKsatleft(fractheta-theta_rtheta_s-theta_rright)^c\n c=frac2+3lambdalambda","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"When the unsaturated layer is not split-up into different layers, it is possible to use the original Topog\\_SBM vertical transfer formulation, by specifying in the TOML file:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[model]\ntransfermethod = true","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The transfer of water from the SIbUmm store to the SIbSmm store (SIbstmm s^-1) is in that case controlled by the saturated hydraulic conductivity SIbsubtextKsatmm s^-1 at depth SIbz_imm and the ratio between SIbUmm and SIbS_dmm:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" mathrmst=subtextKsatfracU_sS_d","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Four different saturated hydraulic conductivity depth profiles (ksat_profile) are available and a ksat_profile can be specified in the TOML file as follows:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[input.vertical]\nksat_profile = \"exponential_constant\" # optional, one of (\"exponential\", \"exponential_constant\", \"layered\", \"layered_exponential\"), default is \"exponential\"","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Soil measurements are often available for about the upper SI15-2m of the soil column to estimate the saturated hydraulic conductivity, while these measurements are often lacking for soil depths beyond SI15-2m. These different profiles allow to extent the saturated hydraulic conductivity profile based on measurements (either an exponential fit or hydraulic conductivity value per soil layer) with an exponential or constant profile. By default, with ksat_profile \"exponential\", the saturated hydraulic conductivity SIbsubtextKsatmm s^-1 declines with soil depth SIbzmm in the model according to:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextKsat = K_0 e^-fz","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"where SIbK_0mm s^-1 is the saturated hydraulic conductivity at the soil surface and SIbfmm^-1 is a scaling parameter.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The plot below shows the relation between soil depth z and saturated hydraulic conductivity subtextKsat for different values of f.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" using Printf\n using CairoMakie","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" let # hide\n fig = Figure(resolution = (800, 400)) # hide\n ax = Axis(fig[1, 1], xlabel = L\"K_\\mathrm{sat}\\;[\\mathrm{mm/day}]\", ylabel = L\"-z\\;[\\mathrm{mm}]\") # hide\n\n z = 0:5.0:1000 # hide\n ksat = 100.0 # hide\n f = 0.6 ./ collect(50:150.0:800) # hide\n\n for fi in f # hide\n lines!(ax, ksat .* exp.(-fi .* z), -z, label = @sprintf(\"%.2e\", fi)) # hide\n end # hide\n\n Legend(fig[1, 2], ax, L\"f\") # hide\n fig # hide\n end # hide","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"With ksat_profile \"exponential_constant\", subtextKsat declines exponentially with soil depth SIbzmm until SIbsubtextzmmmm below the soil surface, and stays constant at and beyond soil depth subtextzexp:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextKsat = begincases\n K_0e^-fz textif z subtextzexp\n K_0e^-fsubtextzexp textif z ge subtextzexp\n endcases","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"It is also possible to provide a subtextKsat value per soil layer by specifying ksat_profile \"layered\", these subtextKsat values are used directly to compute the vertical transfer of water between soil layers and to the saturated store S. Finally, with the ksat_profile \"layered_exponential\" a subtextKsat value per soil layer is used until depth subtextzlayered below the soil surface, and beyond subtextzlayered an exponential decline of subtextKsat (of the soil layer with bottom subtextzlayered) controlled by f occurs. The different available ksat_profle options are schematized in the figure below where the blue line represents the subtextKsat value.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"(Image: ksat_profiles)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Overview of available ksat_profile options, for a soil column with five layers","category":"page"},{"location":"model_docs/vertical/sbm/#Infiltration","page":"SBM","title":"Infiltration","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The water available for infiltration is taken as the rainfall including meltwater. Infiltration is determined separately for the compacted and non-compacted areas, as these have different infiltration capacities. Naturally, only the water that can be stored in the soil can infiltrate. If not all water can infiltrate, this is added as excess water to the runoff routing scheme.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" The infiltrating water is split in two parts, the part that falls on compacted areas and the part that falls on non-compacted areas. The maximum amount of water that can infiltrate in these areas is calculated by taking the minimum of the maximum infiltration rate (infiltcapsoil [mm t^-1] for non-compacted areas and infiltcappath [mm t^-1] for compacted areas) and the amount of water available for infiltration avail_forinfilt [mm t^-1]. The water that can actually infiltrate infiltsoilpath [mm t^-1] is calculated by taking the minimum of the total maximum infiltration rate (compacted and non-compacted areas) and the remaining storage capacity.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Infiltration excess occurs when the infiltration capacity is smaller then the throughfall and stemflow rate. This amount of water (infiltexcess [mm t^-1]) becomes overland flow (infiltration excess overland flow). Saturation excess occurs when the (upper) soil becomes saturated and water cannot infiltrate anymore. This amount of water excesswater [mm t^-1] becomes overland flow (saturation excess overland flow).","category":"page"},{"location":"model_docs/vertical/sbm/#Infiltration-in-frozen-soils","page":"SBM","title":"Infiltration in frozen soils","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"If snow processes are modelled, the infiltration capacity is reduced when the soil is frozen (or near freezing point). A infiltration correction factor is defined as a S-curve with the shape as defined below. A parameter (cf_soil) defines the base factor of infiltration when the soil is frozen. The soil temperature is calculated based on the soil temperature on the previous timestep, and the temperature difference between air and soil temperature weighted with a factor (w_soil, which defaults to 0.1125).","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The near surface soil temperature is modelled using a simple equation (Wigmosta et al., 2009):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"T_s^t = T_s^t-1 + w (T_a - T_s^t-1)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"where SIbT_s^tdegree C is the near-surface soil temperature at time t, SIbT_adegree C is air temperature and SIbw- is a weighting coefficient determined through calibration (default is 0.1125 for daily timesteps).","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"A reduction factor (cf_soil SIb-, default is 0.038) is applied to the maximum infiltration rate (infiltcapsoil and infiltcappath), when the following model settings are specified in the TOML file:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[model]\nsoilinfreduction = true\nsnow = true","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"If soilinfreduction is set to false, water is allowed to infiltrate the soil, even if the soil is frozen.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"A S-curve (see plot below) is used to make a smooth transition (a c-factor (c) of 8.0 is used):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" b = frac1010 - subtextmathrmcfsoil\n mathrmsoilinfredu = frac10b + exp(-c (T_s - a)) + subtextmathrmcfsoil\n a = 00\n c = 80","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"(Image: soil_frozeninfilt)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Infiltration correction factor as a function of soil temperature","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"# Figure created using python: # hide\n# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide","category":"page"},{"location":"model_docs/vertical/sbm/#Capillary-rise","page":"SBM","title":"Capillary rise","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" The actual capillary rise actcapflux [mm t^-1] is determined using the following approach: first the saturated hydraulic conductivity ksat [mm t^-1] is determined at the water table z_i; next a potential capillary rise maxcapflux [mm t^-1] is determined from the minimum of ksat, actual transpiration actevapustore [mm t^-1] taken from the U store, available water in the S store (satwaterdepth SIbmm) and the deficit of the U store (ustorecapacity SIbmm), as shown by the following code block:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" maxcapflux = max(0.0, min(ksat, actevapustore, ustorecapacity, satwaterdepth))","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Then the potential rise maxcapflux is scaled using the water table depth zi, a maximum water depth cap_hmax SIbmm beyond which capillary rise ceases and a coefficient cap_n SIb-, as follows in the code block below (i refers to the index of the vector that contains all active cells within the spatial model domain):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" if sbm.zi[i] > rootingdepth\n capflux =\n maxcapflux * pow(\n 1.0 - min(sbm.zi[i], sbm.cap_hmax[i]) / (sbm.cap_hmax[i]),\n sbm.cap_n[i],\n )\n else\n capflux = 0.0\n end","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"If the roots reach the water table (rootingdepth ge sbm.zi), capflux is set to zero.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Finally, the capillary rise capflux is limited by the unsaturated store deficit (one or multiple layers), calculated as follows in the code block below (i refers to the index of the vector that contains all active cells within the spatial model domain, and k refers to the layer position):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" usl[k] * (sbm.theta_s[i] - sbm.theta_r[i]) - usld[k]","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"where usl SIbmm is the unsaturated layer thickness, usld is the ustorelayerdepth SIbmm (amount of water in the unsaturated layer), and theta_s and theta_r as previously defined.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The calculation of the actual capillary rise actcapflux is as follows in the code block below (i refers to the index of the vector that contains all active cells within the spatial model domain, and k refers to the layer position):","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" actcapflux = 0.0\n netcapflux = capflux\n for k = n_usl:-1:1\n toadd =\n min(netcapflux, max(usl[k] * (sbm.theta_s[i] - sbm.theta_r[i]) - usld[k], 0.0))\n usld = setindex(usld, usld[k] + toadd, k)\n netcapflux = netcapflux - toadd\n actcapflux = actcapflux + toadd\n end","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"In case of multiple unsaturated layers (n_usl 1), the calculation of the actual capillary rise starts at the lowest unsaturated layer while keeping track of the remaining capillary rise netcapflux [mm t^-1].","category":"page"},{"location":"model_docs/vertical/sbm/#Leakage","page":"SBM","title":"Leakage","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"If the maxleakage SIbmm day^-1 input model parameter is set > 0, water is lost from the saturated zone and runs out of the model.","category":"page"},{"location":"model_docs/vertical/sbm/#Open-water","page":"SBM","title":"Open water","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Part of the water available for infiltration is diverted to the open water, based on the fractions of river and lakes of each grid cell. The amount of evaporation from open water is assumed to be equal to potential evaporation (if sufficient water is available).","category":"page"},{"location":"model_docs/vertical/sbm/#Non-irrigation","page":"SBM","title":"Non-irrigation","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Non-irrigation water demand and allocation computations are supported for the sectors domestic, industry and livestock. These computations can be enabled by specifying the following in the TOML file:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[model.water_demand]\ndomestic = true\nindustry = true\nlivestock = true","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"For these non-irrigation sectors the gross demand (d_mathrmgross [mm t^-1]) and net demand (d_mathrmnet [mm t^-1]) are provided to the model (input through cyclic or forcing data). Gross demand represents the total demand and hence the total abstraction from surface water or groundwater when sufficient water is available. Net demand represents water consumption. The portion of total abstracted water that is not consumed is returned as surface water. The return flow fraction (f_mathrmreturn [-]) is calculated as follows:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextfreturn = 10 - fracsubtextdnetsubtextdgross","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"and used to calculate the return flow rate (water abstracted from surface water or groundwater but not consumed). For grid cells containing a river the return flow is directly returned to the river routing component, otherwise the return flow is returned to the overland flow routing component.","category":"page"},{"location":"model_docs/vertical/sbm/#Non-paddy-irrigation","page":"SBM","title":"Non-paddy irrigation","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Non-paddy (other crops than flooded rice) water demand and allocation computations are supported. These computations can be enabled by specifying the following in the TOML file:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[model.water_demand]\nnonpaddy = true","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Irrigation is applied during the growing season (when input parameter irrigation_trigger SIb- is true (or on)) and when water depletion exceeds the readily available water:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" (subtextUfield - subtextUa) ge (subtextUfield - subtextUh3)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"where SIbsubtextUfieldmm is the unsaturated store in the root zone at field capacity (defined at a soil water pressure head of SI-100cm), SIbsubtextUamm is the actual unsaturated store in the root zone and SIbsubtextUh3mm is the unsaturated store in the root zone at the critical soil water pressure head h3, below this pressure head reduction of root water uptake starts due to drought stress. The net irrigation demand [mm t^-1] is the irrigation rate that brings the root zone back to field capacity, limited by the soil infiltration capacity [mm t^-1], assuming that farmers do not apply an irrigation rate higher than the soil infiltration capacity. To account for limited irrigation efficiency the net irrigation demand is divided by the irrigation efficiency for non-paddy crops (irrigation_efficiency SIb-, default is 10), resulting in gross irrigation demand [mm t^-1]. Finally, the gross irrigation demand is limited by the maximum irrigation rate (maximum_irrigation_rate [mm t^-1], default is 25 mm d^-1). If the maximum irrigation rate is applied, irrigation continues at subsequent time steps until field capacity is reached. Irrigation is added to the SBM variable avail_forinfilt [mm t^-1], the amount of water available for infiltration.","category":"page"},{"location":"model_docs/vertical/sbm/#Paddy-irrigation","page":"SBM","title":"Paddy irrigation","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Paddy (flooded rice) water demand and allocation computations are supported. These computations can be enabled by specifying the following in the TOML file:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"[model.water_demand]\npaddy = true","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Irrigation is applied during the growing season (when input parameter irrigation_trigger SIb- is true (or on)) and when the paddy water depth h SIbmm reaches below the minimum water depth h_min SIbmm (see also the figure below). The net irrigation demand [mm t^-1] is the irrigation rate required to reach the optimal paddy water depth h_opt SIbmm, an approach similar to Xie and Cui (2011). To account for limited irrigation efficiency the net irrigation demand is divided by the irrigation efficiency for paddy fields (irrigation_efficiency SIb-, default is 1.0), resulting in gross irrigation demand [mm t^-1]. Finally, the gross irrigation demand is limited by the maximum irrigation rate (maximum_irrigation_rate [mm t^-1], default is SIb25mm d^-1). If the maximum irrigation rate is applied, irrigation continues at subsequent time steps until the optimal paddy water depth h_opt is reached. Irrigation is added to the SBM variable avail_forinfilt [mm t^-1], the amount of water available for infiltration. When the paddy water depth h exceeds h_max SIbmm runoff occurs, and this amount is added to the runoff routing scheme for overland flow. The figure below shows a typical vertical soil profile of a puddled rice soil with a muddy layer of about 15 cm (in this case represented by two soil layers of 5 cm and 10 cm thickness), a plow soil layer of 5 cm with relative low permeability (vertical hydraulic conductivity k_v of about SI5mm d^-1), and a non-puddled soil below the plow soil layer. The low vertical hydraulic conductivity of the plow soil layer can be realized by making use of the parameter kvfrac SIb-, a multiplication factor applied to the vertical hydraulic conductivity at soil depth SIbzmm.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"(Image: paddy_profile)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Schematic diagram of a paddy field with water balance components and soil profile","category":"page"},{"location":"model_docs/vertical/sbm/#Water-withdrawal-and-allocation","page":"SBM","title":"Water withdrawal and allocation","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"For the water withdrawal the total gross demand is computed (sum over the irrigation and non-irrigation water demand sectors), in case sufficient water is available the water withdrawal is equal to the total gross demand. In case of insufficient water availability, the water withdrawal is scaled down to the available water, and allocation is then proportional to the gross demand per sector (industry, domestic, livestock and irrigation). Water can be abstracted from the following sources:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"surface water from rivers (max 80% of total available water) \nreservoirs and lakes (max 98% of total available water)\ngroundwater (max 75% of total available water)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The model parameter frac_sw_used (fraction surface water used, default is 1.0) determines how much water is supplied by available surface water and groundwater.","category":"page"},{"location":"model_docs/vertical/sbm/#Local","page":"SBM","title":"Local","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"First, surface water abstraction (excluding reservoir and lake locations) is computed to satisfy local (same grid cell) water demand. The available surface water volume is limited by a fixed scaling factor of 08 to prevent rivers from completely drying out. It is assumed that the water demand cannot be satisfied completely from local surface water and groundwater. The next step is to satisfy the remaining water demand for allocation areas SIb-, described in the next sub-section.","category":"page"},{"location":"model_docs/vertical/sbm/#Allocation-areas","page":"SBM","title":"Allocation areas","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"For allocation areas the water demand SIbsubtextVsw demandm^3 and availability SIbsubtextVsw availabiltym^3 are summed (including reservoir and lake locations limited by a fixed scaling factor of 098), and the total surface water abstraction is then:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextVsw abstraction = min (subtextVsw demand subtextVsw availabilty)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The fraction of available surface water that can be abstracted SIbsubtextfswabstraction- at the allocation area level is then:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextfsw abstraction = fracsubtextVsw abstractionsubtextVsw available","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"This fraction is applied to the remaining available surface water of each river cell (including lake and reservoir locations) to compute surface water abstraction at each river cell and to update the local surface water abstraction.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The fraction of water demand that can be satisfied by available surface water SIbsubtextfsw allocation- at the allocation area level is then:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextfsw allocation = fracsubtextVsw abstractionsubtextVsw demand","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"This fraction is applied to the remaining surface water demand of each land cell to compute the allocated surface water to each land cell.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Then groundwater abstraction is computed to satisfy the remaining local water demand, where groundwater abstraction is limited by a fixed scaling factor of 0.75 applied to the groundwater volume. Finally, for allocation areas the water demand SIbsubtextVgwdemandm^3 and availability SIbsubtextVgw availabiltym^3 are summed, and the total groundwater abstraction is then:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextVgw abstraction = min(subtextVgw demand subtextVgw availabilty)","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The fraction of available groundwater that can be abstracted at allocation area level SIbsubtextfgw abstraction- at the allocation area level is then:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextfgw abstraction = fracsubtextVgw abstractionsubtextVgw available","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"This fraction is applied to the remaining available groundwater of each land cell to compute groundwater abstraction and to update the local groundwater abstraction.","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"The fraction of water demand that can be satisfied by available groundwater SIbsubtextfgwallocation- at the allocation area level is then:","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":" subtextfgw allocation = fracsubtextVgw abstractionsubtextVgw demand","category":"page"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"This fraction is applied to the remaining groundwater demand of each land cell to compute the allocated groundwater to each land cell.","category":"page"},{"location":"model_docs/vertical/sbm/#Abstractions","page":"SBM","title":"Abstractions","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Groundwater abstraction is implemented by subtracting this amount from the recharge variable of the lateral subsurface flow component (kinematic wave) or the recharge rate of the groundwater flow module. Surface water abstraction SIbm^3 s^-1 is divided by the flow length dl SIbm and subtracted from the lateral inflow of kinematic wave routing scheme for river flow. For the local inertial routing scheme (river and optional floodplain routing), the surface water abstraction SIbm^3 s^-1 is subtracted as part of the continuity equation of the local inertial model. For reservoir and lake locations surface water is abstracted (act_surfacewater_abst_vol SIbm^3 s^-1) from the reservoir volume SIbm^3 and lake storage SIbm^3 respectively, with a subsequent update of the lake waterlevel SIbm.","category":"page"},{"location":"model_docs/vertical/sbm/#References","page":"SBM","title":"References","text":"","category":"section"},{"location":"model_docs/vertical/sbm/","page":"SBM","title":"SBM","text":"Brooks, R. H., and Corey, A. T., 1964, Hydraulic properties of porous media, Hydrology Papers 3, Colorado State University, Fort Collins, 27 p.\nFeddes, R.A., Kowalik, P.J. and Zaradny, H., 1978, Simulation of field water use and crop yield, Pudoc, Wageningen, Simulation Monographs.\nGash, J. H. C., 1979, An analytical model of rainfall interception by forests, Q. J. Roy. Meteor. Soc., 105, 43–55, doi:1026 10.1002/qj.497105443041027.\nLiu, S., 1998, Estimation of rainfall storage capacity in the canopies of cypress wetlands and slash pine uplands in North-Central Florida, J. Hydr., 207, 32–41, doi: 10.1016/S0022-1694(98)00115-2.\nPitman, J., 1989, Rainfall interception by bracken in open habitats—relations between leaf area, canopy storage and drainage rate, J. Hydr. 105, 317–334, doi: 10.1016/0022-1694(89)90111-X.\nVan Dijk, A. I. J. M., and Bruijnzeel, L. A., 2001, Modelling rainfall interception by vegetation of variable density using an adapted analytical model, Part 2, Model validation for a tropical upland mixed cropping system, J. Hydr., 247, 239–262.\nVertessy, R., and Elsenbeer, H., 1999, Distributed modeling of storm flow generation in an amazonian rain forest catchment: effects of model parameterization, Water Resour. Res., 35, 2173–2187. doi: 10.1029/1999WR9000511257.\nWigmosta, M. S., Lane, L. J., Tagestad, J. D., and Coleman A. M., 2009, Hydrologic and erosion models to assess land use and management practices affecting soil erosion, J. Hydrol. Eng., 14, 27-41.\nXie, X. and Cui, Y., 2011, Development and test of SWAT for modeling hydrological processes in irrigation districts with paddy rice, J. Hydrol., 396, pp. 61-71.","category":"page"},{"location":"intro/publications/#Publications","page":"Publications","title":"Publications","text":"","category":"section"},{"location":"intro/publications/#Citing-wflow","page":"Publications","title":"Citing wflow","text":"","category":"section"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"For publications, please cite the following paper introducing Wflow.jl and describing the wflow_sbm concept, together with some case studies:","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"van Verseveld, W. J., Weerts, A. H., Visser, M., Buitink, J., Imhoff, R. O., Boisgontier, H., Bouaziz, L., Eilander, D., Hegnauer, M., ten Velden, C., and Russell, B., 2024. Wflow_sbm v0.7.3, a spatially distributed hydrological model: from global data to local applications. Geosci. Model Dev., 17, 3199–3234. https://doi.org/10.5194/gmd-17-3199-2024.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"To cite a specific software version please use the DOI provided in the Zenodo badge (Image: DOI), that points to the latest release. The DOIs of previous versions are also available at Zenodo. If you use a snapshot of the development (without a DOI) please cite as follows:","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"van Verseveld, Willem, Visser, Martijn, Buitink, Joost, Bouaziz, Laurène, Boisgontier, Hélène, Bootsma, Huite, Weerts, Albrecht, Baptista, Carlos Fernando, Pronk, Maarten, Eilander, Dirk, Hartgring, Sebastian, Dalmijn, Brendan, Hofer, Julian, Hegnauer, Mark, & Mendoza, Raul, (YEAR). Deltares/Wflow.jl: unstable-master. https://github.com/Deltares/Wflow.jl, obtained: DATE_OF_DOWNLOAD.","category":"page"},{"location":"intro/publications/#Publications-using-wflow","page":"Publications","title":"Publications using wflow","text":"","category":"section"},{"location":"intro/publications/#Peer-reviewed-journal-papers","page":"Publications","title":"Peer reviewed journal papers","text":"","category":"section"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Aerts, J. P. M., Hut, R. W., van de Giesen, N. C., Drost, N., van Verseveld, W. J., Weerts, A. H., and Hazenberg, P., 2022. Large-sample assessment of varying spatial resolution on the streamflow estimates of the wflow_sbm hydrological model. Hydrol. Earth Syst. Sci., 26, 4407–4430. https://doi.org/10.5194/hess-26-4407-2022.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"de Boer-Euser, T., Bouaziz, L., De Niel, J., Brauer, C., Dewals, B., Drogue, G., Fenicia, F., Grelier, B., Nossent, J., Pereira, F., Savenije, H., Thirel, G., Willems, P., 2017. Looking beyond general metrics for model comparison – lessons from an international model intercomparison study. Hydrol. Earth Syst. Sci. 21, 423–440. https://doi:10.5194/hess-21-423-2017.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Bouaziz, L.J.E., Fenicia, F., Thirel, G., de Boer-Euser, T., Buitink, J., Brauer, C.C., De Niel, J., Dewals, B.J., Drogue, G., Grelier, B., Melsen, L. A., Moustakas, S., Nossent, J., Pereira, F., Sprokkereef, E., Stam, J., Weerts, A.H., Willems, P., Savenije, H.H.G., Hrachowitz, M., 2021. Behind the scenes of streamflow model performance. Hydrol. Earth Syst. Sci., 25, 1069–1095. https://doi.org/10.5194/hess-25-1069-2021.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Bouaziz, L. J. E., Aalbers, E. E., Weerts, A. H., Hegnauer, M., Buiteveld, H., Lammersen, R., Stam, J., Sprokkereef, E., Savenije, H. H. G., and Hrachowitz, M., 2022. Ecosystem adaptation to climate change: the sensitivity of hydrological predictions to time-dynamic model parameters, Hydrol. Earth Syst. Sci., 26, 1295–1318. https://doi.org/10.5194/hess-26-1295-2022.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Casson, D. R., Werner, M., Weerts, A., and Solomatine, D., 2018. Global re-analysis datasets to improve hydrological assessment and snow water equivalent estimation in a sub-Arctic watershed. Hydrol. Earth Syst. Sci., 22, 4685–4697. https://doi.org/10.5194/hess-22-4685-2018.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Droppers, B., Rakovec, O., Avila, L., Azimi, S., Cortés-Torres N., De León Pérez, D., Imhoff, R., Francés, F., Kollet, S., Rigon, R., Weerts, A. & Samaniego, L, 2024. Multi-model hydrological reference dataset over continental Europe and an African basin. Sci Data, 11, 1009. https://doi.org/10.1038/s41597-024-03825-9.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Emerton, R.E., Stephens, E.M., Pappenberger, F., Pagano, T.C., Weerts, A.H., Wood, A.W., Salamon, P., Brown, J.D., Hjerdt, N., Donnelly, C., Baugh, C.A., Cloke, H.L., 2016. Continental and global scale flood forecasting systems. WIREs Water 3, 391–418. https://doi.org/10.1002/wat2.1137.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Gebremicael, T.G., Mohamed, Y.A., Van der Zaag, P., 2019. Attributing the hydrological impact of different land use types and their long-term dynamics through combining parsimonious hydrological modelling, alteration analysis and PLSR analysis. Science of The Total Environment, 660, 1155-1167, https://doi.org/10.1016/jscitotenv.2019.01.085.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Giardino, A., Schrijvershof, R., Nederhoff, C.M., de Vroeg, H., Brière, C., Tonnon, P.-K., Caires, S., Walstra, D.J., Sosa, J., van Verseveld, W., Schellekens, J., Sloff, C.J., 2018. A quantitative assessment of human interventions and climate change on the West African sediment budget, Ocean & Coastal Management, 156, 249-265. https://doi.org/10.1016/j.ocecoaman.2017.11.008.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Hally, A., Caumont, O., Garrote, L., Richard, E., Weerts, A., Delogu, F., Fiori, E., Rebora, N., Parodi, A., Mihalović, A., Ivković, M., Dekić, L., van Verseveld, W., Nuissier, O., Ducrocq, V., D’Agostino, D., Galizia, A., Danovaro, E., Clematis, A., 2015. Hydrometeorological multi-model ensemble simulations of the 4 November 2011 flash flood event in Genoa, Italy, in the framework of the DRIHM project. Nat. Hazards Earth Syst. Sci. 15, 537–555. https://doi:10.5194/nhess-15-537-2015.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Hassaballah, K., Mohamed, Y., Uhlenbrook, S., and Biro, K., 2017. Analysis of streamflow response to land use and land cover changes using satellite data and hydrological modelling: case study of Dinder and Rahad tributaries of the Blue Nile (Ethiopia–Sudan), Hydrol. Earth Syst. Sci., 21, 5217–5242. https://doi.org/10.5194/hess-21-5217-2017.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Imhoff, R.O., Buitink, J., van Verseveld, W.J., Weerts, A.H., 2024. A fast high resolution distributed hydrological model for forecasting, climate scenarios and digital twin applications using wflow_sbm. Environmental Modelling & Software, 179, 106099. https://doi.org/10.1016/j.envsoft.2024.106099","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Imhoff, R.O, van Verseveld, W.J., van Osnabrugge, B., Weerts, A.H., 2020. Scaling Point-Scale (Pedo)transfer Functions to Seamless Large-Domain Parameter Estimates for High-Resolution Distributed Hydrologic Modeling: An Example for the Rhine River. Water Resources Research, 56, e2019WR026807. https://doi.org/10.1029/2019WR026807.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Imhoff, R.O., van Verseveld, W., van Osnabrugge, B., Weerts, A.H., 2020. Ruimtelijk schaalbare hydrologische modelparameters uit open-source omgevingsdata: een voorbeeld voor de Rijn. Stromingen: vakblad voor hydrologen, 26(3), 19-36 https://edepot.wur.nl/540682.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Jeuken, A., Bouaziz, L., Corzo, G., Alfonso, L., 2016. Analyzing Needs for Climate Change Adaptation in the Magdalena River Basin in Colombia, in: Filho, W.L., Musa, H., Cavan, G., O’Hare, P., Seixas, J. (Eds.), Climate Change Adaptation, Resilience and Hazards, Climate Change Management. Springer International Publishing, pp. 329–344 https://doi.org/10.1007/978-3-319-39880-8.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"López López, P., Wanders, N., Schellekens, J., Renzullo, L.J., Sutanudjaja, E.H., Bierkens, M.F.P., 2016. Improved large-scale hydrological modelling through the assimilation of streamflow and downscaled satellite soil moisture observations. Hydrol. Earth Syst. Sci., 20, 3059–3076. https://doi.org/10.5194/hess-20-3059-2016.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Pranoto, B., Soekarno, H., Hartulistiyoso, E., Nur Aidi, M., Sutrisno, D., Pohan, D., Radhika, Sutejo, B., Heru Kuncoro, A., Nahib, I., 2024. Integrating Flood Early Warning System (FEWS) for Optimizing Small Hydropower Sites: A West Java Case Study. EVERGREEN Joint Journal of Novel Carbon Resource Sciences & Green Asia Strategy, 11, 3, 2691-2699. https://www.tj.kyushu-u.ac.jp/evergreen/contents/EG2024-11_3_content/pdf/p2691-2699.pdf","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Rakovec, O., Weerts, A.H., Sumihar, J., Uijlenhoet, R., 2015. Operational aspects of asynchronous filtering for flood forecasting. Hydrol. Earth Syst. Sci., 19, 2911–2924, https://doi.org/10.5194/hess-19-2911-2015.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Ratri, D.N., A.H. Weerts, R. Muharsyah, K. Whan, A. Klein Tank, E. Aldrian, M. H. Hariadi, Calibration of ECMWF SEAS5 based streamflow forecast in Seasonal hydrological forecasting for Citarum river basin, West Java, Indonesia, Journal of Hydrology: Regional Studies,45,101305, https://doi.org/10.1016/j.ejrh.2022.101305.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Rusli, S.R., A.H. Weerts, A. Taufiq, V. Bense, 2021. Estimating water balance components and their uncertainty bounds in highly groundwater-dependent and data-scarce area: An example for the Upper Citarum basin, J. Hydrol. Regional Studies, https://doi.org/10.1016/j.ejrh.2021.100911.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Rusli, S.R., V.F. Bense, A. Taufiq, A.H. Weerts,2023. Quantifying basin-scale changes in groundwater storage using GRACE and one-way coupled hydrological and groundwater flow model in the data-scarce Bandung groundwater Basin, Indonesia, Groundwater for Sustainable Development,22, 100953, https://doi.org/10.1016/j.gsd.2023.100953.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Rusli, S.R., A.H. Weerts, S.M.T. Mustafa, D.E. Irawan, A. Taufiq, V.F. Bense, 2023. Quantifying aquifer interaction using numerical groundwater flow model evaluated by environmental water tracer data: Application to the data-scarce area of the Bandung groundwater basin, West Java, Indonesia, Journal of Hydrology: Regional Studies, 50, https://doi.org/10.1016/j.ejrh.2023.101585.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Schaller, N., Sillmann, J., Müller, M., Haarsma, R., Hazeleger, W., Hegdahl, T.J., Kelder, T., van den Oord, G., Weerts, A., Whan, K., 2020. The role of spatial and temporal model resolution in a flood event storyline approach in western Norway. Weather and Climate Extremes, doi: https://doi.org/10.1016/j.wace.2020.100259.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Seizarwati, W. and M. Syahidah, 2021. Rainfall-Runoff Simulation for Water Availability Estimation in Small Island Using Distributed Hydrological Model wflow. IOP Conf. Ser.: Earth Environ. Sci., 930,012050, doi:10.1088/1755-1315/930/1/012050. https://iopscience.iop.org/article/10.1088/1755-1315/930/1/012050/pdf","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Sperna Weiland, F.C., R.D. Visser, P. Greve, B. Bisselink, L. Brunner and A.H. Weerts, 2021. Estimating Regionalized Hydrological Impacts of Climate Change Over Europe by Performance-Based Weighting of CORDEX Projections, Frontiers of Water, https://doi.org/10.3389/frwa.2021.713537.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Tangdamrongsub, N., Steele-Dunne, S.C., Gunter, B.C., Ditmar, P.G., Weerts, A.H., 2015. Data assimilation of GRACE terrestrial water storage estimates into a regional hydrological model of the Rhine River basin. Hydrol. Earth Syst. Sci. 19, 2079–2100. https://doi:10.5194/hess-19-2079-2015.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"van der Laan, E., P. Hazenberg, A.H. Weerts, 2024. Simulation of long-term storage dynamics of headwater reservoirs across the globe using public cloud computing infrastructure. Science of The Total Environment, 172678, https://doi.org/10.1016/j.scitotenv.2024.172678.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"van Osnabrugge, B., Weerts, A.H., Uijlenhoet, R., 2017. genRE: A method to extend gridded precipitation climatology data sets in near real-time for hydrological forecasting purposes. Water Resources Research, 53. https://doi.org/10.1002/2017WR021201.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"van Osnabrugge, B., Uijlenhoet, R., Weerts, A., 2019. Contribution of potential evaporation forecasts to 10-day streamflow forecast skill for the Rhine River, Hydrol. Earth Syst. Sci., 23, 1453–1467, https://doi.org/10.5194/hess-23-1453-2019.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"van der Vat, M., Boderie, P., Bons, K.A., Hegnauer, M., Hendriksen, G., van Oorschot, M., Ottow, B., Roelofsen, F., Sankhua, R.N., Sinha, S.K., Warren, A., Young, W., 2019. Participatory Modelling of Surface and Groundwater to Support Strategic Planning in the Ganga Basin in India. Water, 11, 2443. https://doi.org/10.3390/w11122443.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Wannasin, C., Brauer, C. C., Uijlenhoet, R., van Verseveld, W. J., Weerts, A. H., 2021. Daily flow simulation in Thailand Part I: Testing a distributed hydrological model with seamless parameter maps based on global data. Journal of Hydrology: Regional Studies, 34, 1-19. https://doi.org/10.1016/j.ejrh.2021.100794.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Wannasin, C., Brauer, C. C., Uijlenhoet, R., van Verseveld, W. J., Weerts, A. H., 2021. Daily flow simulation in Thailand Part II: Unraveling effects of reservoir operation. Journal of Hydrology: RegionalStudies, 34, 1-17. https://doi.org/10.1016/j.ejrh.2021.100792.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Wang, X., Zhang, J., Babovic, V., 2016. Improving real-time forecasting of water quality indicators with combination of process-based models and data assimilation technique. Ecological Indicators 66, 428–439. https://doi:10.1016/j.ecolind.2016.02.016.","category":"page"},{"location":"intro/publications/#PhD,-MSc,-BSc-Theses-and-Internship-reports","page":"Publications","title":"PhD, MSc, BSc Theses & Internship reports","text":"","category":"section"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Abdelnour, A., 2022. Bias Correction of Climate Simulations to Assess Climate Change Impacts on Low Flows in the Rhine River, MSc thesis, Delft Universitry of technology, https://repository.tudelft.nl/islandora/object/uuid:50489399-cbd2-467f-9b82-98e5f3e371e9.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Ali, M.A., 2023. Machine learning for predicting spatially variable lateral hydraulic conductivity: a step towards efficient hydrological model calibration and global applicability, Intersnhip report, Deltares.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Arnal, L., 2014. An intercomparison of flood forecasting models for the Meuse River basin, MSc Thesis, Vrije Universiteit, Amsterdam, https://hal.inrae.fr/hal-02600749.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Alkemade, G., 2019. Routing and calibration of distributed hydrological models, MSc Thesis, Vrije Universiteit, Amsterdam, Faculty of Science, Hydrology.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Azadeh Karami Fard, 2015. Modeling runoff of an Ethiopian catchment with WFLOW, MSc. Thesis, Vrije Universiteit, Amsterdam.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Benschop, J., 2023. The application of hybrid lateral routing in hydrological simulations of the Rhine catchment, MSc Thesis, Hydrology and Environmental Hydraulics Group, Wageningen University.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Beusen, B., 2021. The effect of rooting depth on discharge and evapotranspiration in (semi-)arid areas, MSc Thesis, Hydrology and Quantitative Water Management Group, Wageningen University.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Beusen, B., 2021. Plastic transport and the effect of climate change in the Rhine, Internship report, Deltares.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Bouaziz, L. J. E., 2021. Internal processes in hydrological models: A glance at the Meuse basin from space. Delft University of Technology, Delft, the Netherlands, Doctoral dissertation, https://doi.org/10.4233/uuid:09d84cc1-27e2-4327-a8c7-207a75952061.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Hartgring, S., 2023. On Forecasting the Rur River: Using hindcasts and forecasts of the 2021 flood event to improve understanding of flood forecasting in the Rur catchment. Delft University of Technology, Delft, the Netherlands, MSc thesis, http://resolver.tudelft.nl/uuid:2909d997-a983-490a-a588-87119998543a.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Jaime, D.E.V, 2021. Ensemble hydrological forecasts to derive extreme return periods: Case Study of the Overijsselse Vecht River using the wflow_sbm model, MSc thesis, Unesco IHE, Delft.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"López López, P., 2018. Application of Global Hydrological Datasets for River Basin Modelling Utrecht University, Utrecht, the Netherlands, pp. 1-214, Doctoral dissertation, http://dspace.library.uu.nl/handle/1874/364148.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Maat, W.H., 2015. Simulating discharges and forecasting floods using a conceptual rainfall-runoff model for the Bolivian Mamoré basin, MSc Thesis, University of Twente, Enschede. https://essay.utwente.nl/67046/.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"van Osnabrugge, B., 2020. Interpolate, simulate, assimilate: operational aspects of improving hydrological forecasts in the Rhine basin. Wageningen University, Doctoral dissertation, https://doi.org/10.18174/513157.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Rohrmueller, I., 2019. BENCHMARKING THE NEW WFLOW DISTRIBUTED HYDROLOGICAL MODEL, MSc Thesis, School of Engineering - Newcastle University.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Rusli, S.R., 2024. Deepening the quantitative understanding of groundwater systems in data-scarce areas: application in the Bandung Groundwater Basin, Indonesia. Wageningen University, Doctoral dissertation, https://doi.org/10.18174/640983.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Tretjakova, D., 2015. Investigating the effect of using fully-distributed model and data assimilation on the performance of hydrological forecasting in the Karasu catchment, Turkey, MSc thesis, Wageningen University.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"van der Gaast, R.H., 2024. Evaluating the transferability of data-driven pedo-transfer functions for the wflow_sbm parameter KsatHorFrac in central and Western Europe. Universiteit Twente, Enschede, The Netherlands, https://essay.utwente.nl/103634/1/vandergaast_MA_ET.pdf.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Verbrugge, M., 2019. Reservoir Operation Optimization, a case study in the Chao Phraya Basin, BSc thesis, Hydrology and Quantitative Water Management Group, Wageningen University.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Verbrugge, M., 2023. Bias-correcting meteorological forcing to improve seasonal discharge forecasting of the Rhine, Internship report, Deltares.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Viguures, P., 2020. Modelling of flash floods in current and future climate with high resolution convection permitting regional climate models in the European Alps, MSc Thesis, Wageningen University.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Visser, B., 2020. Impact of climate change on local water resources of European catchments, Intersnhip report, Deltares.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"Wannasin, C., 2023. Modelling and forecasting daily streamflow with reservoir operation in the upper Chao Phraya River basin, Thailand. Wageningen University, Doctoral dissertation, https://doi.org/10.18174/584572.","category":"page"},{"location":"intro/publications/#Reports","page":"Publications","title":"Reports","text":"","category":"section"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"World Bank. 2021. Plastic Waste Discharges from Rivers and Coastlines in Indonesia. Marine Plastics Series;. World Bank, Washington, DC. © World Bank, https://openknowledge.worldbank.org/handle/10986/35607, License: CC BY 3.0 IGO.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"World Meteorological Organization (WMO), 2023. State of Global Water Resources report 2022, WMO-No. 1333, https://library.wmo.int/idurl/4/68473.","category":"page"},{"location":"intro/publications/","page":"Publications","title":"Publications","text":"World Meteorological Organization (WMO), 2024. State of Global Water Resources report 2023, WMO-No. 1362, https://library.wmo.int/idurl/4/69033.","category":"page"},{"location":"model_docs/shared_concepts/#Shared-processes","page":"Shared processes","title":"Shared processes","text":"","category":"section"},{"location":"model_docs/shared_concepts/#snow_and_glac","page":"Shared processes","title":"Snow and glaciers","text":"","category":"section"},{"location":"model_docs/shared_concepts/#Snow-modelling","page":"Shared processes","title":"Snow modelling","text":"","category":"section"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"If the air temperature, T_a, is below a user-defined threshold tt SIbdegree C precipitation occurs as snowfall, whereas it occurs as rainfall if T_a mathrmtt. A another parameter tti defines how precipitation can occur partly as rain or snowfall (see the figure below). If precipitation occurs as snowfall, it is added to the dry snow component within the snow pack. Otherwise it ends up in the free water reservoir, which represents the liquid water content of the snow pack. Between the two components of the snow pack, interactions take place, either through snow melt (if temperatures are above a threshold tt) or through snow refreezing (if temperatures are below threshold tt).","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"The respective rates of snow melt and refreezing are:","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"beginalign*\n Q_m = subtextmathrmcfmax(T_amathrmtt) T_a mathrmtt \n Q_r = subtextmathrmcfmax mathrmcf_r(mathrmttT_a) T_a mathrmtt\nendalign*","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"where Q_m is the rate of snow melt, Q_r is the rate of snow refreezing, and SIbsubtextmathrmcfmaxmm(degree C)^-1 day^-1 and mathrmcf_r are user defined model parameters (the melting factor and the refreezing factor respectively).","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"The fraction of liquid water in the snow pack is at most equal to a user defined fraction, whc, of the water equivalent of the dry snow content. If the liquid water concentration exceeds whc, either through snow melt or incoming rainfall, the surplus water (rainfall) becomes available for infiltration into the soil:","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":" snowwater = snowwater - refreezing # free water content in snow\n maxsnowwater = snow * whc # max water in the snow\n snowwater = snowwater + snowmelt + rainfall # add all water and potentially supersaturate the snowpack\n rainfall = max(snowwater - maxsnowwater, 0.0) # rain + surplus snowwater","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"\n (Image: snowmelt)","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Snowmelt and refreezing rates as a function of temperature (for set melting and refreezing factors)","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"# Figure created using python: # hide\n# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-snowmelt_fig-py # hide","category":"page"},{"location":"model_docs/shared_concepts/#Glacier-modelling","page":"Shared processes","title":"Glacier modelling","text":"","category":"section"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Glacier processes can be modelled if the snow model is enabled. For the vertical HBV concept snow modelling is not optional. Glacier modelling is very close to snow modelling and considers two main processes: glacier build-up from snow turning into firn/ice (using the HBV-light model) and glacier melt (using a temperature degree-day model).","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"The definition of glacier boundaries and initial volume is defined by two parameters. The parameter glacierfrac gives the fraction of each grid cell covered by a glacier as a number between zero and one. The state parameter glacierstore gives the amount of water (in mm w.e.) within the glaciers at each grid cell. Because the glacier store (glacierstore) cannot be initialized by running the model for a couple of years, a default initial state should be supplied by adding this parameter to the input static file. The required glacier data can be prepared from available glacier datasets.","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"First, a fixed fraction of the snowpack on top of the glacier is converted into ice for each timestep and added to the glacierstore using the HBV-light model (Seibert et al., 2018). This fraction g_sifrac typically ranges from 0001 to 0006.","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Then, when the snowpack on top of the glacier is almost all melted (snow cover SI10mm), glacier melt is enabled and estimated with a degree-day model. If the air temperature, T_a, is below a certain threshold g_tt (SIbdegree C) precipitation occurs as snowfall, whereas it occurs as rainfall if T_a g_tt.","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"With this the rate of glacier melt in mm is estimated as:","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Q_m = subtextgcfmax(T_a subtextgtt) T_a subtextgtt","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"where Q_m is the rate of glacier melt and SIbsubtextgcfmaxmm (degree C)^-1day^-1 is the melting factor. Parameter g_tt can be taken as equal to the snow tt parameter. Values of the melting factor g_cfmax normally varies from one glacier to another and some values are reported in the literature. g_cfmax can also be estimated by multiplying snow cfmax by a factor between 1 and 2, to take into account the higher albedo of ice compared to snow.","category":"page"},{"location":"model_docs/shared_concepts/#Rainfall-interception","page":"Shared processes","title":"Rainfall interception","text":"","category":"section"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Both the Gash and Rutter models are available to estimate rainfall interception by the vegetation. The selection of an interception model depends on the simulation timestep.","category":"page"},{"location":"model_docs/shared_concepts/#The-analytical-(Gash)-model","page":"Shared processes","title":"The analytical (Gash) model","text":"","category":"section"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"The analytical model of rainfall interception is based on Rutter's numerical model. The simplifications that introduced allow the model to be applied on a daily basis, although a storm-based approach will yield better results in situations with more than one storm per day. The amount of water needed to completely saturate the canopy is defined as:","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"P=frac-overlineRSoverlineE_wlogleft1-fracoverlineE_woverlineR(1-p-p_t)^-1right","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"where overlineR is the average precipitation intensity on a saturated canopy and overlineE_w the average evaporation from the wet canopy and with the vegetation parameters S, p and p_t as defined previously. The model uses a series of expressions to calculate the interception loss during different phases of a storm. An analytical integration of the total evaporation and rainfall under saturated canopy conditions is then done for each storm to determine average values of overlineE_w and overlineR. The total evaporation from the canopy (the total interception loss) is calculated as the sum of the components listed in the table below. Interception losses from the stems are calculated for days with Pgeq S_tp_t. p_t and S_t are small and neglected.","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Table: Formulation of the components of interception loss according to Gash:","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Components Interception loss\nFor m small storms (P_gP_g) (1-p-p_t)sum_j=1^m P_gj\nWetting up the canopy in n large storms (P_ggeqP_g) n(1-p-p_t)P_g-nS\nEvaporation from saturated canopy during rainfall overlineEoverlineRsum_j=1^n(P_gj-P_g)\nEvaporation after rainfall ceases for n large storms nS\nEvaporation from trunks in q storms that fill the trunk storage qS_t\nEvaporation from trunks in m+n-q storms that do not fill the trunk storage p_tsum_j=1^m+n-qP_gj","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"In applying the analytical model, saturated conditions are assumed to occur when the hourly rainfall exceeds a certain threshold. Often a threshold of 0.5 mm/hr is used. overlineR is calculated for all hours when the rainfall exceeds the threshold to give an estimate of the mean rainfall rate onto a saturated canopy.","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Gash (1979) has shown that in a regression of interception loss on rainfall (on a storm basis) the regression coefficient should equal to overlineE_woverlineR. Assuming that neither overlineE_w nor overlineR vary considerably in time, overlineE_w can be estimated in this way from overlineR in the absence of above-canopy climatic observations. Values derived in this way generally tend to be (much) higher than those calculated with the penman-monteith equation.","category":"page"},{"location":"model_docs/shared_concepts/#The-modified-rutter-model","page":"Shared processes","title":"The modified rutter model","text":"","category":"section"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"For sub daily timesteps the interception is calculated using a simplification of the Rutter model. The simplified model is solved explicitly and does not take drainage from the canopy into account.","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Wflow.rainfall_interception_modrut","category":"page"},{"location":"model_docs/shared_concepts/#Wflow.rainfall_interception_modrut","page":"Shared processes","title":"Wflow.rainfall_interception_modrut","text":"rainfall_interception_modrut(precipitation, potential_evaporation, canopystorage, canopygapfraction, cmax)\n\nInterception according to a modified Rutter model. The model is solved explicitly and there is no drainage below cmax.\n\n\n\n\n\n","category":"function"},{"location":"model_docs/shared_concepts/#Interception-parameters-from-LAI","page":"Shared processes","title":"Interception parameters from LAI","text":"","category":"section"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"The SBM concept can determine the interception parameters from leaf area index (LAI) climatology. In order to switch this on you must define this cyclic parameter in the TOML file, the parameter is read from path_static, as follows:","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"[input]\npath_forcing = \"data/forcing-moselle.nc\"\npath_static = \"data/staticmaps-moselle.nc\"\n\ncyclic = [\"vertical.leaf_area_index\"]","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Furthermore these additional parameters are required:","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Specific leaf storage (sl SIbmm)\nStorage woody part of vegetation (swood SIbmm)\nExtinction coefficient (kext SIb-)","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Here it is assumed that cmax SIbmm (leaves) (canopy storage capacity for the leaves only) relates linearly with LAI (c.f. Van Dijk and Bruijnzeel 2001). This done via the sl. sl can be determined through a lookup table with land cover based on literature (Pitman 1989, Lui 1998). Next the cmax (leaves) is determined using:","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"\n mathrmcmax(mathrmleaves) = mathrmsl cdot mathrmLAI","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"To get to total storage (cmax) the woody part of the vegetation also needs to be added. As for sl, the storage of the woody part swood can also be related to land cover (lookup table).","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"The canopy gap fraction is determined using the extinction coefficient kext (van Dijk and Bruijnzeel 2001):","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":" mathrmcanopygapfraction = exp(-subtextkext cdot mathrmLAI)","category":"page"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"The extinction coefficient kext can be related to land cover.","category":"page"},{"location":"model_docs/shared_concepts/#References","page":"Shared processes","title":"References","text":"","category":"section"},{"location":"model_docs/shared_concepts/","page":"Shared processes","title":"Shared processes","text":"Seibert, J., Vis, M. J. P., Kohn, I., Weiler, M., and Stahl, K., 2018, Technical note: Representing glacier geometry changes in a semi-distributed hydrological model, Hydrol. Earth Syst. Sci., 22, 2211–2224, https://doi.org/10.5194/hess-22-2211-2018.","category":"page"},{"location":"user_guide/install/#How-to-install","page":"How to install","title":"How to install","text":"","category":"section"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"First, download and install the current stable release of Julia. If you have any issues installing Julia, please see platform specific instructions for further instructions.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"If you are new to Julia, it might be a good idea to check out the Getting Started section of the Julia Manual. You can also find additional learning resources at julialang.org/learning.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"Wflow can be used in two different ways, depending on the required use of the code:","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"If you want to stay up-to-date with the latest version, explore and modify the model code, and write your own Julia scripts around the wflow package, we recommend installing wflow as a Julia package.\nIf you don't need extra features, but just want to run simulations, a compiled executable version is available. This version includes a single executable, wflow_cli, which allows you to run the model via the command line.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"Below we describe how to install both versions of wflow.","category":"page"},{"location":"user_guide/install/#Installing-as-Julia-package","page":"How to install","title":"Installing as Julia package","text":"","category":"section"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"Wflow is a Julia package that can be installed in several ways. Below, we show how to install wflow from Julia's package repository and how to install the latest version from GitHub.","category":"page"},{"location":"user_guide/install/#Install-from-Julia's-package-repository","page":"How to install","title":"Install from Julia's package repository","text":"","category":"section"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"To access Julia's package manager, press ] in the Julia REPL. To get back to the Julia REPL, press backspace or ^C.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"tip: Tip\nIf you haven't used Julia in a while, it's a good idea to run up to update your packages.pkg> up","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"To access Julia's package manager and install wflow, use:","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"pkg> add Wflow","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"This process can take a while, especially on the first run, as compatible dependencies are automatically resolved and installed from the Pkg General registry.","category":"page"},{"location":"user_guide/install/#Install-from-GitHub","page":"How to install","title":"Install from GitHub","text":"","category":"section"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"You can also install wflow from the master branch on the repository as follows:","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"pkg> add Wflow#master","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"This command tracks the master branch and updates to the latest commit on that branch when you run update, or simply up, in the Pkg REPL. The add installs wflow in your home directory under .julia/packages/Wflow. Note that packages installed under packages by add should not be changed in the directory, as the change could disrupt Pkg's automatic dependency handling.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"If you want to modify any files in the repository, you need to do a development install. This can be done using:","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"pkg> dev Wflow","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"This will clone the git repository, place it under your home directory in .julia/dev/Wflow, and add the wflow package to your project environment. To receive updates, you'll need to pull the latest changes manually using git pull.","category":"page"},{"location":"user_guide/install/#Check-installation-of-wflow","page":"How to install","title":"Check installation of wflow","text":"","category":"section"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"Finally, go back to the Julia REPL and try to load wflow:","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"julia> using Wflow","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"The first time you do this, it may take longer as any new or changed packages need to be precompiled to enable faster loading on subsequent uses. No error messages should appear, which indicates that you have successfully installed wflow.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"Before concluding this section, we recommend a few tools that can make using and developing Julia code easier.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"tip: Tip\nThere is a section on editors and IDEs for Julia on https://julialang.org/, scroll down to see it. We use and recommend Microsoft's free and open source Visual Studio Code. Combined with the Julia extension it provides a powerful and interactive development experience.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"tip: Tip\nIf you plan to modify the code of wflow, we recommend installing the Revise.jl package. This package allows you to modify code and use the changes without restarting Julia. Install it with add Revise from the Pkg REPL. Then create a file called .julia/config/startup.jl, and put using Revise there. This will load Revise every time you start a Julia session.","category":"page"},{"location":"user_guide/install/#Installing-the-compiled-executable","page":"How to install","title":"Installing the compiled executable","text":"","category":"section"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"Binaries of wflow_cli can be downloaded from our website download.deltares.nl, and are currently available for Windows. Download and install the .msi file. After installation, you will see two folders in the installation directory. Only the bin/wflow_cli is used. The artifacts folder contains binary dependencies such as netCDF.","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"artifacts\\\nbin\\wflow_cli","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"To verify whether the installation was completed successfully, run wflow_cli with no arguments in the command line. This will display the following message:","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"Usage: wflow_cli 'path/to/config.toml'","category":"page"},{"location":"user_guide/install/","page":"How to install","title":"How to install","text":"note: Note\nThe old version of wflow, which was based on Python and PCRaster libraries, is also available for download from our website download.deltares.nl. We recommend installing the Julia version, as this documentation is written to support this version.","category":"page"},{"location":"model_docs/params_lateral/#params_lat","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"","category":"section"},{"location":"model_docs/params_lateral/#Kinematic-wave","page":"Parameters lateral concepts","title":"Kinematic wave","text":"","category":"section"},{"location":"model_docs/params_lateral/#Surface-flow","page":"Parameters lateral concepts","title":"Surface flow","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct SurfaceFlowRiver used for river flow, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river] to map the internal model parameter to the external netCDF variable. The input parameter slope (listed under [input.lateral.river]) is not equal to the internal model parameter sl, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nbeta constant in Manning's equation - -\nsl (slope) slope m m^-1 -\nn Manning's roughness s m^-frac13 0.036\ndl length m -\nq discharge m^3 s^-1 -\nqin inflow from upstream cells m^3 s^-1 -\nq_av average discharge m^3 s^-1 -\nqlat lateral inflow per unit length m^2 s^-1 -\ninwater lateral inflow m^3 s^-1 -\ninflow external inflow (abstraction/supply/demand) m^3 s^-1 0.0\ninflow_wb inflow waterbody (lake or reservoir model) from land part m^3 s^-1 0.0\nabstraction abstraction (computed as part of water demand and allocation) m^3 s^-1 0.0\nvolume kinematic wave volume m^3 -\nh water level m -\nh_av average water level m -\nbankfull_depth bankfull river depth m 1.0\ndt model time step s -\nits number of fixed iterations - -\nwidth width m -\nalpha_pow used in the power part of alpha - -\nalpha_term term used in computation of alpha - -\nalpha constant in momentum equation A = alpha Q^beta s^frac35 m^frac15 -\ncel celerity of kinematic wave m s^-1 -\nreservoir_index map cell to 0 (no reservoir) or i (pick reservoir i in reservoir field) - -\nlake_index map cell to 0 (no lake) or i (pick lake i in lake field) - -\nreservoir an array of reservoir models SimpleReservoir - -\nlake an array of lake models Lake - -\nallocation water allocation of type AllocationRiver - -\nkinwave_it boolean for kinematic wave iterations - false","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct SurfaceFlowLand used for overland flow, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.land] to map the internal model parameter to the external netCDF variable. The input parameter slope (listed under [input.lateral.land]) is not equal to the internal model parameter sl, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nbeta constant in Manning's equation - -\nsl (slope) slope m m^-1 -\nn Manning's roughness s m^-frac13 0.072\ndl length m -\nq discharge m^3 s^-1 -\nqin inflow from upstream cells m^3 s^-1 -\nq_av average discharge m^3 s^-1 -\nqlat lateral inflow per unit length m^2 s^-1 -\ninwater lateral inflow m^3 s^-1 -\nvolume kinematic wave volume m^3 -\nh water level m -\nh_av average water level m -\ndt model time step s -\nits number of fixed iterations - -\nwidth width m -\nalpha_pow used in the power part of alpha - -\nalpha_term term used in computation of alpha - -\nalpha constant in momentum equation A = alpha Q^beta s^frac35 m^frac15 -\ncel celerity of kinematic wave m s^-1 -\nto_river part of overland flow that flows to the river m^3 s^-1 -\nkinwave_it boolean for kinematic wave iterations - false","category":"page"},{"location":"model_docs/params_lateral/#reservoir_params","page":"Parameters lateral concepts","title":"Reservoirs","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct SimpleReservoir, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river.reservoir], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"Two parameters reservoir coverage areas and the outlet of reservoirs (unique id) locs that are not part of the SimpleReservoir struct are also required, and can be set as follows through the TOML file:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input.lateral.river.reservoir]\nareas = \"wflow_reservoirareas\"\nlocs = \"wflow_reservoirlocs\"","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\narea area m^2 -\ndemand minimum (environmental) flow requirement downstream of the reservoir m^3 s^-1 -\nmaxrelease maximum amount that can be released if below spillway m^3 s^-1 -\nmaxvolume maximum storage (above which water is spilled) m^3 -\ntargetfullfrac target fraction full (of max storage) - -\ntargetminfrac target minimum full fraction (of max storage) - -\ndemandrelease minimum (environmental) flow released from reservoir m^3 s^-1 -\ndt model time step s -\nvolume volume m^3 -\ninflow total inflow into reservoir m^3 -\noutflow outflow into reservoir m^3 s^-1 -\ntotaloutflow total outflow into reservoir m^3 -\npercfull fraction full (of max storage) - -\nprecipitation average precipitation for reservoir area mm Δt⁻¹ -\nevaporation average potential evaporation for reservoir area mm Δt⁻¹ -\nactevap average actual evaporation for lake area mm Δt⁻¹ -","category":"page"},{"location":"model_docs/params_lateral/#lake_params","page":"Parameters lateral concepts","title":"Lakes","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct Lake, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river.lake], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"Two parameters lake coverage areas and the outlet of lakes (unique id) locs that are not part of the Lake struct are also required, and can be set as follows through the TOML file:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input.lateral.river.lake]\nareas = \"wflow_lakeareas\"\nlocs = \"wflow_lakelocs\"","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The input parameter linkedlakelocs (listed under [input.lateral.river.lake]) is not equal to the internal model parameter lowerlake_ind, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\narea area m^2 -\nb Rating curve coefficient - -\ne Rating curve exponent - -\noutflowfunc type of lake rating curve - -\nstorfunc type of lake storage curve - -\nthreshold water level threshold H_0 below that level outflow is zero m -\nwaterlevel waterlevel H of lake m -\nlowerlake_ind (linkedlakelocs) Index of lower lake (linked lakes) - 0\nsh data for storage curve - -\nhq data rating curve - -\ndt model time step s -\ninflow total inflow to the lake m^3 -\nstorage storage lake m^3 -\nmaxstorage maximum storage lake with rating curve type 1 m^3 -\noutflow outflow lake m^3 s^-1 -\ntotaloutflow total outflow lake m^3 -\nprecipitation average precipitation for lake area mm Δt⁻¹ -\nevaporation average potential evaporation for lake area mm Δt⁻¹ -\nactevap average actual evaporation for lake area mm Δt⁻¹ -","category":"page"},{"location":"model_docs/params_lateral/#params_ssf","page":"Parameters lateral concepts","title":"Lateral subsurface flow","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct LateralSSF, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF). The soil related parameters f, soilthickness, z_exp, theta_s and theta_r are derived from the vertical SBM concept (including unit conversion for f, z_exp and soilthickness), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable. The internal slope model parameter slope is set through the TOML file as follows:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input.lateral.land]\nslope = \"Slope\"","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The parameter kh_0 is computed by multiplying the vertical hydraulic conductivity at the soil surface kv_0 (including unit conversion) of the vertical SBM concept with the internal parameter khfrac [-] (default value of 1.0). The internal model parameter khfrac is set through the TOML file as follows:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input.lateral.subsurface]\nksathorfrac = \"KsatHorFrac\"","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The khfrac parameter compensates for anisotropy, small scale kv_0 measurements (soil core) that do not represent larger scale hydraulic conductivity, and smaller flow length scales (hillslope) in reality, not represented by the model resolution.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"For the vertical SBM concept different vertical hydraulic conductivity depth profiles are possible, and these also determine which LateralSSF parameters are used including the input requirements for the computation of lateral subsurface flow. For the exponential profile the model parameters kh_0 and f are used. For the exponential_constant profile kh_0 and f are used, and z_exp is required as part of [input.vertical]. For the layered profile, SBM model parameter kv is used, and for the layered_exponential profile kv is used and z_exp is required as part of [input.vertical].","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nkh_0 horizontal hydraulic conductivity at soil surface m d^-1 3.0\nf a scaling parameter (controls exponential decline of kh_0) m^-1 1.0\nkh horizontal hydraulic conductivity m d^-1 -\nkhfrac (ksathorfrac) a muliplication factor applied to vertical hydraulic conductivity kv - 100.0\nsoilthickness soil thickness m 2.0\ntheta_s saturated water content (porosity) - 0.6\ntheta_r residual water content - 0.01\ndt model time step d -\nslope slope m m^-1 -\ndl drain length m -\ndw drain width m -\nzi pseudo-water table depth (top of the saturated zone) m -\nz_exp depth from soil surface for which exponential decline of kh_0 is valid m -\nexfiltwater exfiltration (groundwater above surface level, saturated excess conditions) m Δt⁻¹ -\nrecharge net recharge to saturated store m^2 Δt⁻¹ -\nssf subsurface flow m^3 d-1 -\nssfin inflow from upstream cells m^3 d-1 -\nssfmax maximum subsurface flow m^2 d-1 -\nto_river part of subsurface flow that flows to the river m^3 d-1 -\nvolume subsurface water volume m^3 -","category":"page"},{"location":"model_docs/params_lateral/#Local-inertial","page":"Parameters lateral concepts","title":"Local inertial","text":"","category":"section"},{"location":"model_docs/params_lateral/#local-inertial_river_params","page":"Parameters lateral concepts","title":"River flow","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct ShallowWaterRiver, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river], to map the internal model parameter to the external netCDF variable. The parameter river bed elevation zb is based on the bankfull elevation and depth input data:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input.lateral.river]\nbankfull_elevation = \"RiverZ\"\nbankfull_depth = \"RiverDepth\"","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"When floodplain routing (parameter floodplain) is included as part of local inertial river flow, parameter q_av represents the total average discharge of the river channel and floodplain routing, and parameter q_channel_av represents average river channel discharge. Otherwise parameters q_av and q_channel_av represent both average river channel discharge (are equal).","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The input parameter n (listed under [input.lateral.river]) is not equal to the internal model parameter mannings_n, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nmannings_n (n) Manning's roughness s m^-frac13 0.036\nwidth river width m -\nzb river bed elevation m -\nlength river length m -\nn number of cells - -\nne number of edges/links - -\nactive_n active nodes - -\nactive_e active edges - -\ng acceleration due to gravity m s^-2 -\nalpha stability coefficient (Bates et al., 2010) - 0.7\nh_thresh depth threshold for calculating flow m 0.001\ndt model time step s -\nq river discharge (subgrid channel) m^3 s^-1 -\nq_av average river channel (+ floodplain) discharge m^3 s^-1 -\nq_channel_av average river channel discharge m^3 s^-1 -\nzb_max maximum channel bed elevation m -\nmannings_n_sq Manning's roughness squared at edge/link (s m^-frac13)^2 -\nh water depth m -\nzs_max maximum water elevation m -\nzs_src water elevation of source node of edge m -\nzs_dst water elevation of downstream node of edge m -\nhf water depth at edge/link m -\nh_av average water depth m -\ndl river length m -\ndl_at_link river length at edge/link m -\nwidth river width m -\nwidth_at_link river width at edge/link m -\na flow area at edge/link m^2 -\nr hydraulic radius at edge/link m -\nvolume river volume m^3 -\nerror error volume m^3 -\ninwater lateral inflow m^3 s^-1 -\ninflow external inflow (abstraction/supply/demand) m^3 s^-1 0.0\nabstraction abstraction (computed as part of water demand and allocation) m^3 s^-1 0.0\ninflow_wb inflow waterbody (lake or reservoir model) from land part m^3 s^-1 0.0\nbankfull_volume bankfull volume m^3 -\nbankfull_depth bankfull depth m -\nfroude_limit if true a check is performed if froude number > 1.0 (algorithm is modified) - -\nreservoir_index river cell index with a reservoir - -\nlake_index river cell index with a lake - -\nwaterbody water body cells (reservoir or lake) - -\nreservoir an array of reservoir models SimpleReservoir - -\nlake an array of lake models Lake - -\nallocation optional water allocation of type AllocationRiver - -\nfloodplain optional 1D floodplain routing FloodPlain - -","category":"page"},{"location":"model_docs/params_lateral/#local-inertial_floodplain_params","page":"Parameters lateral concepts","title":"1D floodplain","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct FloodPlain (part of struct ShallowWaterRiver), including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river.floodplain], to map the internal model parameter to the external netCDF variable. The input parameter n (listed under [input.lateral.river.floodplain]) is not equal to the internal model parameter mannings_n, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nprofile Floodplain profile FloodPlainProfile \nmannings_n (n) Manning's roughness for the floodplain s m^-frac13 0.072\nmannings_n_sq Manning's roughness squared at edge/link (s m^-frac13)^2 -\nvolume flood volume m^3 -\nh flood depth m -\nh_av average flood depth m -\nerror error volume m^3\na flow area at edge/link m^2 -\nr hydraulic radius at edge/link m -\nhf flood depth at edge/link m -\nzb_max maximum bankfull elevation at edge m -\nq0 discharge at previous time step m^3 s^-1 -\nq discharge m^3 s^-1 -\nq_av average discharge m^3 s^-1 -\nhf_index index with hf above depth threshold - -","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The floodplain profile FloodPlainProfile contains the following parameters:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\ndepth (flood_depth) flood depths m -\nvolume cumulative flood volume (per flood depth) m^3 -\nwidth cumulative floodplain width (per flood depth) m -\na cumulative floodplain flow area (per flood depth) m^2 -\np cumulative floodplain wetted perimeter (per flood depth) m -","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The floodplain volumes (per flood depth interval) can be set as follows through the TOML file:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input.lateral.river.floodplain]\nvolume = \"floodplain_volume\"","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The input parameter flood_depth (dimension of floodplain volume) is not equal to the internal model parameter depth, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/#local-inertial_land_params","page":"Parameters lateral concepts","title":"Overland flow","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct ShallowWaterLand, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.land], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The mannings roughness (for the computation of mannings_n_sq) should be provided as follows in the TOML file:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input.lateral.land]\nn = \"n_land\" # mannings roughness","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The input parameter elevation (listed under [input.lateral.land]) is not equal to the internal model parameter z, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nn number of cells - -\nxl cell length x direction m -\nyl cell length y direction m -\nxwidth effective flow width x direction (floodplain) m -\nywidth effective flow width y direction (floodplain) m -\ng acceleration due to gravity m s^-2 -\ntheta weighting factor (de Almeida et al., 2012) - 0.8\nalpha stability coefficient (Bates et al., 2010) - 0.7\nh_thresh depth threshold for calculating flow m 0.001\ndt model time step s -\nqy0 flow in y direction at previous time step m^3 s^-1 -\nqx0 flow in x direction at previous time step m^3 s^-1 -\nqx flow in x direction m^3 s^-1 -\nqy flow in y direction m^3 s^-1 -\nzx_max maximum cell elevation (x direction) m -\nzy_max maximum cell elevation (y direction) m -\nmannings_n_sq Manning's roughness squared s m^-frac13 based on 0.072\nvolume total volume of cell (including river volume for river cells) m^3 -\nerror error volume m^3 -\nrunoff runoff from hydrological model m^3 s^-1 -\nh water depth of cell m -\nz (elevation) elevation of cell m -\nfroude_limit if true a check is performed if froude number > 1.0 (algorithm is modified) - -\nrivercells river cells - -\nh_av average water depth m -","category":"page"},{"location":"model_docs/params_lateral/#Water-allocation-river","page":"Parameters lateral concepts","title":"Water allocation river","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct AllocationRiver, used when water demand and allocation is computed (optional), including a description of these parameters, the unit, and default value if applicable.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nact_surfacewater_abst actual surface water abstraction mm Δt⁻¹ -\nact_surfacewater_abst_vol actual surface water abstraction m^3 Δt⁻¹ -\navailable_surfacewater available surface water m^3 -\nnonirri_returnflow return flow from non-irrigation (industry, domestic and livestock) mm Δt⁻¹ -","category":"page"},{"location":"model_docs/params_lateral/#Groundwater-flow","page":"Parameters lateral concepts","title":"Groundwater flow","text":"","category":"section"},{"location":"model_docs/params_lateral/#Confined-aquifer","page":"Parameters lateral concepts","title":"Confined aquifer","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct ConfinedAquifer, including a description of these parameters, the unit, and default value if applicable. Struct ConfinedAquifer is not (yet) part of a wflow model.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nk horizontal conductivity m d^-1s -\nstorativity storativity m m^-1 -\nspecific_storage specific storage m^-1 -\ntop top groundwater layers m -\nbottom bottom groundwater layers m -\narea cell area m^2 -\nhead groundwater head m -\nconductance conductance m^2 d^-1 -","category":"page"},{"location":"model_docs/params_lateral/#Unconfined-aquifer","page":"Parameters lateral concepts","title":"Unconfined aquifer","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct UnconfinedAquifer, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.subsurface], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.lateral.subsurface] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter. The top parameter is provided by the external parameter altitude as part of the static input data and set as follows through the TOML file:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input]\n# these are not directly part of the model\naltitude = \"wflow_dem\"","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The input parameter conductivity (listed under [input.lateral.subsurface]) is not equal to the internal model parameter kh_0, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nkh_0 (conductivity) horizontal conductivity m d^-1s -\nspecific_yield specific yield m m^-1 -\ntop (altitude) top groundwater layer m -\nbottom bottom groundwater layer m -\narea cell area m^2 -\nhead groundwater head m -\nconductance conductance m^2 d^-1 -\nf factor controlling the reduction of reference horizontal conductivity - 3.0","category":"page"},{"location":"model_docs/params_lateral/#Constant-Head","page":"Parameters lateral concepts","title":"Constant Head","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct ConstantHead, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.subsurface], to map the internal model parameter to the external netCDF variable. The input parameter constant_head (listed under [input.lateral.subsurface]) is not equal to the internal model parameter head, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nhead (constant_head) groundwater head m -\nindex constant head cell index - -","category":"page"},{"location":"model_docs/params_lateral/#Boundary-conditions","page":"Parameters lateral concepts","title":"Boundary conditions","text":"","category":"section"},{"location":"model_docs/params_lateral/#gwf_river_params","page":"Parameters lateral concepts","title":"River","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct River, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.subsurface], to map the internal model parameter to the external netCDF variable. The input parameter river_bottom (listed under [input.lateral.subsurface]) is not equal to the internal model parameter bottom, and is listed in the Table below between parentheses.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nstage river stage m -\ninfiltration_conductance river bed infiltration conductance m^2 day^-1 m^2 day^-1 -\nexfiltration_conductance river bed exfiltration conductance m^2 day^-1 -\nbottom (river_bottom) river bottom elevation m -\nindex river cell index - -\nflux exchange flux (river to aquifer) m^3 d^-1 -","category":"page"},{"location":"model_docs/params_lateral/#gwf_drainage_params","page":"Parameters lateral concepts","title":"Drainage","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct Drainage, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.subsurface], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.lateral.subsurface] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nelevation (drain_elevation) drain elevation m -\nconductance (drain_conductance) drain conductance m^2 day^-1 -\nindex (drain) drain cell index - -\nflux exchange flux (drains to aquifer) m^3 day^-1 -","category":"page"},{"location":"model_docs/params_lateral/#gwf_recharge_params","page":"Parameters lateral concepts","title":"Recharge","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct Recharge, including a description of these parameters, the unit, and default value if applicable.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nrate recharge rate m^3 day^-1 -\nindex recharge cell index - -\nflux recharge flux m^3 day^-1 -","category":"page"},{"location":"model_docs/params_lateral/#gwf_headboundary_params","page":"Parameters lateral concepts","title":"Head boundary","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct HeadBoundary, including a description of these parameters, the unit, and default value if applicable.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nhead head m -\nconductance conductance of the head boundary m^2 day^-1 -\nindex head boundary cell index - -\nflux conductance of the head boundary m^3 day^-1 -","category":"page"},{"location":"model_docs/params_lateral/#well_boundary_params","page":"Parameters lateral concepts","title":"Well boundary","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct Well, including a description of these parameters, the unit, and default value if applicable.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"input parameter description unit default\nvolumetric_rate volumetric well rate m^3 d^-1 -\nindex well index - -\nflux actual well flux m^3 day^-1 -","category":"page"},{"location":"model_docs/params_lateral/#Sediment","page":"Parameters lateral concepts","title":"Sediment","text":"","category":"section"},{"location":"model_docs/params_lateral/#Overland-flow","page":"Parameters lateral concepts","title":"Overland flow","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct OverlandFlowSediment, including a description of these parameters, the unit, and default value if applicable.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\nn number of cells - -\nrivcell river cells - -\nsoilloss total eroded soil ton Δt^-1 -\nerosclay eroded soil for particle class clay ton Δt^-1 -\nerossilt eroded soil for particle class silt ton Δt^-1 -\nerossand eroded soil for particle class sand ton Δt^-1 -\nerossagg eroded soil for particle class small aggregates ton Δt^-1 -\neroslagg eroded soil for particle class large aggregates ton Δt^-1 -\nTCsed total transport capacity of overland flow ton Δt^-1 -\nTCclay transport capacity of overland flow for particle class clay ton Δt^-1 -\nTCsilt transport capacity of overland flow for particle class silt ton Δt^-1 -\nTCsand transport capacity of overland flow for particle class sand ton Δt^-1 -\nTCsagg transport capacity of overland flow for particle class small aggregates ton Δt^-1 -\nTClagg transport capacity of overland flow for particle class large aggregates ton Δt^-1 -\ninlandsed sediment reaching the river with overland flow ton Δt^-1 -\ninlandclay sediment with particle class clay reaching the river with overland flow ton Δt^-1 -\ninlandsilt sediment with particle class silt reaching the river with overland flow ton Δt^-1 -\ninlandsand sediment with particle class sand reaching the river with overland flow ton Δt^-1 -\ninlandsagg sediment with particle class small aggregates reaching the river with overland flow ton Δt^-1 -\ninlandlagg sediment with particle class large aggregates reaching the river with overland flow ton Δt^-1 -","category":"page"},{"location":"model_docs/params_lateral/#River-flow","page":"Parameters lateral concepts","title":"River flow","text":"","category":"section"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows external parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river]. These external parameters are not part of struct RiverSediment, but used to calculate parameters of struct RiverSediment.","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"external parameter description unit default\nreslocs reservoir location (outlet) - -\nresareas reservoir coverage - -\nresarea reservoir area - m^2\nrestrapeff reservoir trapping efficiency coefficient - -\nlakelocs lake location (outlet) - -\nlakeareas lake coverage - -\nlakearea lake area - m^2","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"The Table below shows the parameters (fields) of struct RiverSediment, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.lateral.river], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.lateral.river] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter. For example, internal model parameter sl is mapped as follows in the TOML file to the external netCDF variable RiverSlope:","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"[input.vertical]\nslope = \"RiverSlope\"","category":"page"},{"location":"model_docs/params_lateral/","page":"Parameters lateral concepts","title":"Parameters lateral concepts","text":"parameter description unit default\ndl (length) river length m -\nwidth river width m -\nsl (slope) river slope - -\nrhos (rhosed) density of sediment kg m^-31 2650.0\ndmclay median diameter particle size class clay mm 2.0\ndmsilt median diameter particle size class silt mm 10.0\ndmsand median diameter particle size class sand mm 200.0\ndmsagg median diameter particle size class small aggregates mm 30.0\ndmlagg median diameter particle size class large aggregates mm 500.0\ndmgrav median diameter particle size class gravel mm 2000.0\nfclayriv fraction of particle class clay - -\nfsiltriv fraction of particle class silt - -\nfsandriv fraction of particle class sand - -\nfsaggriv fraction of particle class small aggregates - -\nflaggriv fraction of particle class large aggregates - -\nfgravriv fraction of particle class gravel - -\nd50 (d50riv) river sediment median diameter mm -\nd50engelund river mean diameter mm -\ncbagnold Bagnold c coefficient - -\nebagnold Bagnold exponent - -\nn number of cells - -\ndt model time step s -\nak Kodatie coefficient a - -\nbk Kodatie coefficient b - -\nck Kodatie coefficient c - -\ndk Kodatie coefficient d - -\nkdbank bank erodibilty m^3 N^-1 s^-1 -\nkdbed bed erodibility m^3 N^-1 s^-1 -\nTCrbank critical bed bank shear stress m^3 N^-2 -\nTCrbed critical bed shear stress m^3 N^-2 -\nh_riv river water level m -\nq_riv river discharge m^3 s^-1 -\ninlandclay sediment input with particle class clay from land erosion t Δt^-1 -\ninlandsilt sediment input with particle class silt from land erosion t Δt^-1 -\ninlandsand sediment input with particle class sand from land erosion t Δt^-1 -\ninlandsagg sediment input with particle class small aggregates from land erosion t Δt^-1 -\ninlandlagg sediment input with particle class large aggregates from land erosion t Δt^-1 -\ninlandsed sediment input from land erosion t Δt^-1 -\nsedload sediment left in the cell t -\nclayload sediment with particle class clay left in the cell t -\nsiltload sediment with particle class silt left in the cell t -\nsandload sediment with particle class sand left in the cell t -\nsaggload sediment with particle class small aggregates left in the cell t -\nlaggload sediment with particle class large aggregates in the cell t -\ngravload sediment with particle class gravel left in the cell t -\nsedstore sediment stored on the river bed after deposition t Δt^-1 -\nclaystore sediment with particle class clay stored on the river bed after deposition t Δt^-1 -\nsiltstore sediment with particle class silt stored on the river bed after deposition t Δt^-1 -\nsandstore sediment with particle class sand stored on the river bed after deposition t Δt^-1 -\nsaggstore sediment with particle class small aggregates stored on the river bed after deposition t Δt^-1 -\nlaggstore sediment with particle class large aggregates stored on the river bed after deposition t Δt^-1 -\ngravstore sediment with particle class gravel stored on the river bed after deposition t Δt^-1 -\noutsed sediment flux t Δt^-1 -\noutclay sediment with particle class clay flux t Δt^-1 -\noutsilt sediment with particle class silt t Δt^-1 -\noutsand sediment with particle class sand t Δt^-1 -\noutsagg sediment with particle class small aggregates t Δt^-1 -\noutlagg sediment with particle class large aggregates t Δt^-1 -\noutgrav sediment with particle class gravel t Δt^-1 -\nSedconc total sediment concentration (SSconc + Bedconc) g m^-3 -\nSSconc suspended load concentration g m^-3 -\nBedconc bed load concentration g m^-3 -\nmaxsed river transport capacity t Δt^-1 -\nerodsed total eroded sediment t Δt^-1 -\nerodsedbank eroded bank sediment t Δt^-1 -\nerodsedbed eroded bed sediment t Δt^-1 -\ndepsed deposited sediment t Δt^-1 -\ninsed sediment input flux t Δt^-1 -\nwbcover waterbody coverage - -\nwblocs waterbody locations - -\nwbarea waterbody area m^2 -\nwbtrap waterbody trapping efficiency coefficient - -","category":"page"},{"location":"model_docs/lateral/sediment_flux/#Sediment-flux","page":"Sediment flux","title":"Sediment flux","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Both the inland and river sediment model take into account sediment flux or transport of sediment in water, either in overland flow or in the stream flow. These two transport are distinguished in two different structures.","category":"page"},{"location":"model_docs/lateral/sediment_flux/#Inland-Sediment-Model","page":"Sediment flux","title":"Inland Sediment Model","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/#Sediment-Flux-in-overland-flow","page":"Sediment flux","title":"Sediment Flux in overland flow","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Once the amount of soil detached by both rainfall and overland flow has been estimated, it has then to be routed and delivered to the river network. Inland routing in sediment models is usually done by comparing the amount of detached sediment with the transport capacity of the flow, which is the maximum amount of sediment that the flow can carry downslope. There are several existing formulas available in the literature. For a wide range of slopes and for overland flow, the Govers equation (1990) seems the most appropriate choice (Hessel et al, 2007). However, as the wflow_sediment model was developed to be linked to water quality issues, the Yalin transport equation was chosen as it can handle particle differentiation (Govers equation can still be used if wflow_sediment is used to only model inland processes with no particle differentiation). For land cells, wflow_sediment assumes that erosion can mobilize 5 classes of sediment:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Clay (mean diameter of SI2mu m)\nSilt (mean diameter of SI10mu m)\nSand (mean diameter of SI200mu m)\nSmall aggregates (mean diameter of SI30mu m)\nLarge aggregates (mean diameter of SI50mu m).","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" mathrmPSA = mathrmSAN (1-mathrmCLA)^24 \n mathrmPSI = 013mathrmSIL\n mathrmPCL = 020mathrmCLA \n\n mathrmSAG = \n beginalign*\n begincases\n 20mathrmCLA text if quad mathrmCLA 025 \n 028(mathrmCLA-025)+05 text if quad 025 leq mathrmCLA leq 05 \n 057 text if quad mathrmCLA 05\n endcases\n endalign* \n\n mathrmLAG = 1 - mathrmPSA - mathrmPSI - mathrmPCL - mathrmSAG","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where mathrmCLA, mathrmSIL and mathrmSAN are the primary clay, silt, sand fractions of the topsoil and mathrmPCL, mathrmPSI, mathrmPSA, mathrmSAG and mathrmLAG are the clay, silt, sand, small and large aggregates fractions of the detached sediment respectively. The transport capacity of the flow using Yalin's equation with particle differentiation, developed by Foster (1982), is:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" mathbfTC_i = (P_e)_i (S_g)_i rho_w g d_i V_*","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where mathbfTC_i is the transport capacity of the flow for the particle class i, (P_e)_i is the effective number of particles of class i, SIb(S_g)_ikg m^-3 is the specific gravity for the particle class i, SIbrho_wkg m^-3 is the mass density of the fluid, SIbgm s^-2 is the acceleration due to gravity, SIbd_im is the diameter of the particle of class i and V_* = SIb(g R S)^05m s^-1 is the shear velocity of the flow with S the slope gradient and SIbRm the hydraulic radius of the flow. The detached sediment are then routed down slope until the river network using the accucapacityflux, accupacitystate functions depending on the transport capacity from Yalin.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"The choice of transport capacity method for the overland flow is set up in the model section of the TOML:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"[model]\nlandtransportmethod = \"yalinpart\" # Overland flow transport capacity method: [\"yalinpart\", \"govers\", \"yalin\"]","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Note that the \"govers\" and \"yalin\" equations can only assess total transport capacity of the flow and can therefore not be used in combination with the river part of the sediment model.","category":"page"},{"location":"model_docs/lateral/sediment_flux/#River-Sediment-Model","page":"Sediment flux","title":"River Sediment Model","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Sediment dynamics in rivers can be described by the same three processes on land: erosion, deposition and transport. The difference is that channel flow is much higher, deeper and permanent compared to overland flow. In channels, erosion is the direct removal of sediments from the river bed or bank (lateral erosion). Sediments are transported in the river either by rolling, sliding and silting (bed load transport) or via turbulent flow in the higher water column (suspended load transport). The type of transport is determined by the river bed shear stress. As sediment particles have a higher density than water, they can also be deposited on the river bed according to their settling velocity compared to the flow velocity. In addition to regular deposition in the river, lakes, reservoirs and floodplains represents additional major sediment settling pools.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Complete models of sediment dynamics based on hydrology and not on hydraulics or hydrodynamics are much rarer than for soil loss and inland dynamics. The simpler models such as the SWAT default sediment river model uses again the transport capacity of the flow to determine if there is erosion or deposition (Neitsch et al., 2011). A more physics-based approach (Partheniades, 1965) to determine river erosion is used by Liu et al. (2018) and in the new SWAT's approach developed by Narasimhan et al. (2017). For wflow_sediment, the new physics-based model of SWAT was chosen for transport and erosion as it enables the use of parameter estimation for erosion of bed and bank of the channel and separates the suspended from the bed loads.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Overview of the different processes for a river cell in wflow_sediment.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"(Image: sediment_instream)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Running the river model is an option of the wflow_sediment model and is enabled using the TOML file. By default it is false:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"[model]\nrunrivermodel = true","category":"page"},{"location":"model_docs/lateral/sediment_flux/#Sediment-inputs-in-a-river-cell","page":"Sediment flux","title":"Sediment inputs in a river cell","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"The first part of the river model assesses how much detached sediment are in the river cell at the beginning of the timestep t. Sources of detached sediment are sediments coming from land erosion, estimated with the soil loss part of wflow_sediment model, the sediment coming from upstream river cells and the detached sediment that were left in the cell at the end of the previous timestep (t-1):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" (subtextmathrmsedin)_t = (subtextmathrmsedland)_t + mathrmupstreamleft(subtexttextsedout)_t-1right + (subtexttextsedriv)_t-1","category":"page"},{"location":"model_docs/lateral/sediment_flux/#River-transport-and-erosion","page":"Sediment flux","title":"River transport and erosion","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Once the amount of sediment inputs at the beginning of the timestep is known, the model then estimates transport, and river erosion if there is a deficit of sediments. Transport in the river system is estimated via a transport capacity formula. There are several transport capacity formulas available in wflow_sediment, some requiring calibration and some not. Choosing a transport capacity equation depends on the river characteristics (some equation are more suited for narrow or wider rivers), and on the reliability of the required river parameters (such as slope, width or mean particle diameter of the river channel). Several river transport capacity are available and the choice is set up in the model section of the TOML:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"[model]\nrivtransportmethod = \"bagnold\" # River flow transport capacity method: [\"bagnold\", \"engelund\", \"yang\", \"kodatie\", \"molinas\"]","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Simplified Bagnold","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Originally more valid for intermediate to large rivers, this simplified version of the Bagnold equation relates sediment transport to flow velocity with two simple calibration parameters (Neitsch et al, 2011):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"C_max = subtextcsp left( dfracmathrmprf Qh W right)^subtextmathrmspexp","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where SIbC_maxkg L^-1 (or SIbton m^-1) is the sediment concentration, SIbQm^3 s^-1 is the surface runoff in the river cell, SIbhm is the river water level, SIbWm is the river width and subtextcsp, mathrmprf and subtextmathrmspexp are calibration parameters. The mathrmprf coefficient is usually used to deduce the peak velocity of the flow, but for simplification in wflow_sediment, the equation was simplified to only get two parameters to calibrate: subtextmathrmspexp and subtextcBagnold = subtextcsp mathrmprf^subtextmathrmspexp. The coefficient subtextmathrmspexp usually varies between 1 and 2 while mathrmprf and subtextcsp have a wider range of variation. The table below summarizes ranges and values of the three Bagnold coefficients used by other studies:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Table: Range of the simplified Bagnold coefficients (and calibrated value)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Study River mathrmprf range subtextcsp range subtextmathrmspexp range\nVigiak 2015 Danube 0.5-2 (/) 0.0001-0.01 (0.003-0.006) 1-2 (1.4)\nVigiak 2017 Danube / 0.0001-0.01 (0.0015) 1-2 (1.4)\nAbbaspour 2007 Thur (CH) 0.2-0.25 (/) 0.001-0.002 (/) 0.35-1.47 (/)\nOeurng 2011 Save (FR) 0-2 (0.58) 0.0001-0.01 (0.01) 1-2 (2)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Engelund and Hansen This transport capacity is not present in SWAT but used in many models such as Delft3D-WAQ, Engelund and Hansen calculates the total sediment load as (Engelund and Hansen, 1967):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" C_w = 005 left( dfracrho_srho_s - rho right) left( dfracu Ssqrtleft( dfracrho_srho_s - rho right) g D_50 right) theta^12","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where C_w is the sediment concentration by weight, SIbrhog m^-3 and SIbrho_sg m^-3 are the fluid and sediment density (here respectively equal to SI1000g m^-3 and SI2650g m^-3), SIbum s^-1 is the water mean velocity, S is the river slope, g is the acceleration due to gravity, SIbD_50m is the river mean diameter and theta is the Shields parameter.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Kodatie Kodatie (1999) developed the power relationships from Posada (1995) using field data and linear optimization so that they would be applicable for a wider range of riverbed sediment size. The resulting equation, for a rectangular channel, is (Neitsch et al, 2011):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" C_max = left( dfraca u^b h^c S^dsubtextVin right) W","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where SIbsubtextVinm^3 in the volume of water entering the river cell during the timestep and a, b, c and d are coefficients depending on the riverbed sediment size. Values of these coefficients are summarized in the table below.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Table: Range of the simplified Bagnold coefficients (and calibrated value)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"River sediment diameter a b c d\nD_50 leq SI005mm 281.4 2.622 0.182 0\nSI005mm D_50 leq SI025mm 2 829.6 3.646 0.406 0.412\nSI025mm D_50 leq SI20mm 2 123.4 3.300 0.468 0.613\nD_50 SI20mm 431 884.8 1.000 1.000 2.000","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Yang Yang (1996) developed a set of two equations giving transport of sediments for sand-bed or gravel-bed rivers. The sand equation (D_50 SI20mm) is:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" logleft(C_ppmright) = 5435 - 0286logleft(fracomega_s50D_50nuright)-0457logleft(fracu_*omega_s50right) \n +left(1799-0409logleft(fracomega_s50D_50nuright)-0314logleft(fracu_*omega_s50right)right)logleft(fracuSomega_s50-fracu_crSomega_s50right)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"And the gravel equation (SI20mm leq D_50 SI100mm) is:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" logleft(C_ppmright) = 6681 - 0633logleft(fracomega_s50D_50nuright)-4816logleft(fracu_*omega_s50right) \n +left(2784-0305logleft(fracomega_s50D_50nuright)-0282logleft(fracu_*omega_s50right)right)logleft(fracuSomega_s50-fracu_crSomega_s50right)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where C_ppm is sediment concentration in parts per million by weight, SIbomega_s50m s^-1 is the settling velocity of a particle with the median riverbed diameter estimated with Stokes, SIbnum^2 s^-1 is the kinematic viscosity of the fluid, SIbu_*m s^-1 is the shear velocity where u_* = sqrtgR_HS with R_H the hydraulic radius of the river and SIbu_crm s^-1 is the critical velocity (equation can be found in Hessel, 2007).","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Molinas and Wu The Molinas and Wu (2001) transport equation was developed for large sand-bed rivers based on the universal stream power psi. The corresponding equation is (Neitsch et al, 2011):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" C_w = dfrac1430 (086+sqrtpsi) psi^150016+psi 10^-6","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where psi is the universal stream power given by:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" psi = dfracpsi^3left(dfracrho_srho-1right) g h omega_s50 left log_10left(dfrachD_50right)right^2","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Once the maximum concentration C_max is established with one of the above transport formula, the model then determines if there is erosion of the river bed and bank. In order to do that, the difference sed_ex between the maximum amount of sediment estimated with transport (mathrmsed_max = C_max subtextVin) and the sediment inputs to the river cell (subtextmathrmsedin calculated above) is calculated. If too much sediment is coming in and subtextmathrmsedex is negative, then there is no river bed and bank erosion. And if the river has not reach its maximum transport capacity, then erosion of the river happens.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"First, the sediments stored in the cell from deposition in previous timesteps subtextmathrmsedstor are eroded from clay to gravel. If this amount is not enough to cover subtextmathrmsedex, then erosion of the local river bed and bank material starts.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Instead of just setting river erosion amount to just cover the remaining difference subtextmathrmsedexeff between subtextmathrmsedex and subtextmathrmsedstor, actual erosion potential is adjusted using river characteristics and is separated between the bed and bank of the river using the physics-based approach of Knight (1984).","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"The bed and bank of the river are supposed to only be able to erode a maximum amount of their material E_Rmathrmbed for the bed and E_Rmathrmbank for the river bank. For a rectangular channel, assuming it is meandering and thus only one bank is prone to erosion, they are calculated from the equations (Neitsch et al, 2011):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" E_Rmathrmbed = k_dmathrmbed left( tau_emathrmbed - tau_crmathrmbed right) 10^-6 L W rho_b mathrmbed Delta t \n E_Rmathrmbank = k_dmathrmbank left( tau_emathrmbank - tau_crmathrmbank right) 10^-6 L h rho_b mathrmbank Delta t","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where SIbE_Rton is the potential bed/bank erosion rates, SIbk_dcm^3 N^-1 s^-1 is the erodibility of the bed/bank material, SIbtau_eN m^-2 is the effective shear stress from the flow on the bed/bank, SIbtau_crN m^-2 is the critical shear stress for erosion to happen, SIbLm, SIbWm and SIbhm are the channel length, width and water height, SIbrho_bg cm^-3 is the bulk density of the bed/bank of the river and SIbDelta ts is the model timestep.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"In wflow_sediment, the erodibility of the bed/bank are approximated using the formula from Hanson and Simon (2001):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" k_d=02 tau_cr^-05","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Normally erodibilities are evaluated using jet test in the field and there are several reviews and some adjustments possible to this equation (Simon et al, 2011). However, to avoid too heavy calibration and for the scale considered, this equation is supposed to be efficient enough. The critical shear stress tau_cr is evaluated differently for the bed and bank. For the bed, the most common formula from Shields initiation of movement is used. For the bank, a more recent approach from Julian and Torres (2006) is used :","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" tau_crmathrmbank = (01+01779 SC+00028 SC^2-234 10^-5 SC^3) C_ch","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where SC is the percent clay and silt content of the river bank and C_ch is a coefficient taking into account the positive impact of vegetation on erosion reduction. This coefficient is then dependent on the land use and classical values are shown in the table below. These values where then adapted for use with the GlobCover land use map. Percent of clay and silt (along with sand and gravel) for the channel is estimated from the river median particle diameter assuming the same values as SWAT shown in the table below. Median particle diameter is here estimated depending on the Strahler river order. The higher the order, the smaller the diameter is. As the median diameter is only used in wflow_sediment for the estimation of the river bed/bank sediment composition, this supposition should be enough. Actual refined data or calibration may however be needed if the median diameter is also required for the transport formula. In a similar way, the bulk densities of river bed and bank are also just assumed to be of respectively 1.5 and 1.4 g cm^-3.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Table: Classical values of the channel cover vegetation coefficient (Julian and Torres, 2006)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Bank vegetation C_ch\nNone 1.00\nGrassy 1.97\nSparse trees 5.40\nDense trees 19.20","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Table : Composition of the river bed/bank depending on the median diameter d_50 [mum] (Neitsch et al, 2011)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Sediment Fraction leq 5 5 to 50 50 to 2000 2000\nSand 0.15 0.15 0.65 0.15\nSilt 0.15 0.65 0.15 0.15\nClay 0.65 0.15 0.15 0.05\nGravel 0.05 0.05 0.05 0.65","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Then, the repartition of the flow shear stress is refined into the effective shear stress and the bed and bank of the river using the equations developed by Knight (1984) for a rectangular channel:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" tau_emathrmbed = rho g R_H S left(1 - dfracSF_mathrmbank100right) left(1+dfrac2hWright) \n tau_emathrmbank = rho g R_H S left( SF_mathrmbankright) left(1+dfracW2hright)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where rho g is the fluid specific weight (SI9800N m^-3 for water), SIbR_Hm is the hydraulic radius of the channel, SIbhm and SIbWm are the water level and river width. SF_mathrmbank is the proportion of shear stress acting on the bank (%) and is estimated from (Knight, 1984):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" mathrmSF_mathrmbank = exp left( -3230 log_10left(dfracWh+3right)+6146 right)","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Finally the relative erosion potential of the bank and bed of the river is calculated by:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" mathrmRTE_mathrmbed = dfracE_RmathrmbedE_Rmathrmbed+E_Rmathrmbank \n mathrmRTE_mathrmbank = 1 - RTE_mathrmbed","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"And the final actual eroded amount for the bed and bank is the maximum between mathrmRTE subtextmathrmsedexeff and the erosion potential E_R. Total eroded amount of sediment subtextmathrmsederod is then the sum of the eroded sediment coming from the storage of previously deposited sediment and the river bed/bank erosion.","category":"page"},{"location":"model_docs/lateral/sediment_flux/#River-deposition","page":"Sediment flux","title":"River deposition","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"As sediments have a higher density than water, moving sediments in water can be deposited in the river bed. The deposition process depends on the mass of the sediment, but also on flow characteristics such as velocity. In wflow_sediment, as in SWAT, deposition is modelled with Einstein's equation (Neitsch et al, 2011):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" subtextPdep=left(1-dfrac1e^xright)100","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where subtextPdep is the percentage of sediments that is deposited on the river bed and x is a parameter calculated with:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" x = dfrac1055 L omega_su h","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where SIbLm and SIbhm are channel length and water height, SIbomega_sm s^-1 is the particle settling velocity calculated with Stokes' formula and SIbum s^-1 is the mean flow velocity. The calculated percentage is then subtracted from the amount of sediment input and eroded river sediment for each particle size class (subtextmathrmseddep = subtextPdep100 (subtextmathrmsedin + subtextmathrmsederod)). Resulting deposited sediment are then stored in the river bed and can be re-mobilized in future time steps by erosion.","category":"page"},{"location":"model_docs/lateral/sediment_flux/#Mass-balance-and-sediment-concentration","page":"Sediment flux","title":"Mass balance and sediment concentration","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Finally after estimating inputs, deposition and erosion with the transport capacity of the flow, the amount of sediment actually leaving the river cell to go downstream is estimated using:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" subtextmathrmsedout = (subtextmathrmsedin + subtextmathrmsederod - subtextmathrmseddep) dfracsubtextVoutV","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where SIbsubtextmathrmsedoutton is the amount of sediment leaving the river cell (tons), SIbsubtextmathrmsedinton is the amount of sediment coming into the river cell (storage from previous timestep, land erosion and sediment flux from upstream river cells), SIbsubtextmathrmsederodton is the amount of sediment coming from river erosion, SIbsubtextmathrmseddepton is the amount of deposited sediments, SIbsubtextVoutm^3 is the volume of water leaving the river cell (surface runoff Q times timestep Delta t) and SIbVm^3 is the total volume of water in the river cell (subtextVout plus storage h W L).","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"A mass balance is then used to calculate the amount of sediment remaining in the cell at the end of the timestep (subtextmathrmsedriv)_t:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" (subtextmathrmsedriv)_t = (subtextmathrmsedriv)_t-1 + (subtextmathrmsedland)_t + mathrmupstreamleft(subtextmathrmsedout)_t-1right + (subtextmathrmsederod)_t - (subtextmathrmseddep)_t - (subtextmathrmsedout)_t","category":"page"},{"location":"model_docs/lateral/sediment_flux/#Lake-and-reservoir-modelling","page":"Sediment flux","title":"Lake and reservoir modelling","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Apart from land and river, the hydrologic wflow_sbm model also handles lakes and reservoirs modelling. In wflow_sbm, lakes and large reservoirs are modelled using a 1D bucket model at the cell corresponding to the outlet. For the other cells belonging to the lake/reservoir which are not the outlet, processes such as precipitation and evaporation are filtered out and shifted to the outlet cell. wflow_sediment handles the lakes and reservoirs in the same way. If a cell belongs to a lake/reservoir and is not the outlet then the model assumes that no erosion/deposition of sediments is happening and the sediments are only all transported to the lake/reservoir outlet. Once the sediments reach the outlet, then sediments are deposited in the lake/reservoir according to Camp's model (1945) (Verstraeten et al, 2000):","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":" mathrmTE = dfracomega_su_crmathrmres = dfracsubtextAressubtextQoutres omega_s","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"where mathrmTE is the trapping efficiency of the lake/reservoir (or the fraction of particles trapped), SIbomega_sm s^-1 is the particle velocity from Stokes, SIbsubtextucrresm s^-1 is the reservoir's critical settling velocity which is equal to the reservoir's outflow SIbsubtextQoutresm^3 s^-1 divided by the reservoir's surface area SIbsubtextAresm^2.","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"For reservoirs, coarse sediment particles from the bed load are also assumed to be trapped by the dam structure. This adding trapping is taken into account with a reservoir trapping efficiency coefficient for large particles (between 0 and 1). Depending on the type of the dam, all bed load particles are trapped (restrapefficiency = 1.0, for example for a gravity dam) or only partly (for example for run-of-the-river dams).","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Lake and reservoir modelling is enabled in the model section of the TOML and require the extra following input arguments:","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"[model]\ndoreservoir = true\ndolake = false\n\n[input.vertical]\n# Reservoir\nresareas = \"wflow_reservoirareas\"\n# Lake\nlakeareas = \"wflow_lakeareas\"\n\n[input.lateral.river]\n# Reservoir\nresarea = \"ResSimpleArea\"\nrestrapefficiency = \"ResTrapEff\"\nresareas = \"wflow_reservoirareas\"\nreslocs = \"wflow_reservoirlocs\"\n# Lake\nlakearea = \"LakeArea\"\nlakeareas = \"wflow_lakeareas\"\nlakelocs = \"wflow_lakelocs\"","category":"page"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"Note that in the inland part, lake and reservoir coverage are used to filter erosion and transport in overland flow.","category":"page"},{"location":"model_docs/lateral/sediment_flux/#References","page":"Sediment flux","title":"References","text":"","category":"section"},{"location":"model_docs/lateral/sediment_flux/","page":"Sediment flux","title":"Sediment flux","text":"K.C. Abbaspour, J. Yang, I. Maximov, R. Siber, K. Bogner, J. Mieleitner, J. Zobrist, and R.Srinivasan. Modelling hydrology and water quality in the pre-alpine/alpine Thur watershed using SWAT. Journal of Hydrology, 333(2-4):413-430, 2007. 10.1016/j.jhydrol.2006.09.014\nP. Borrelli, M. Märker, P. Panagos, and B. Schütt. Modeling soil erosion and river sediment yield for an intermountain drainage basin of the Central Apennines, Italy. Catena, 114:45-58, 2014. 10.1016/j.catena.2013.10.007\nF. Engelund and E. Hansen. A monograph on sediment transport in alluvial streams. Technical University of Denmark 0stervoldgade 10, Copenhagen K., 1967.\nG. Govers. Empirical relationships for the transport capacity of overland flow. IAHS Publication, (January 1990):45-63 ST, 1990.\nG.J Hanson and A Simon. Erodibility of cohesive streambeds in the loess area of the midwestern USA. Hydrological Processes, 15(May 1999):23-38, 2001.\nR Hessel and V Jetten. Suitability of transport equations in modelling soil erosion for a small Loess Plateau catchment. Engineering Geology, 91(1):56-71, 2007. 10.1016/j.enggeo.2006.12.013\nJ.P Julian, and R. Torres. Hydraulic erosion of cohesive riverbanks. Geomorphology, 76:193-206, 2006. 10.1016/j.geomorph.2005.11.003\nD.W. Knight, J.D. Demetriou, and M.E. Hamed. Boundary Shear in Smooth Rectangular Channels. J. Hydraul. Eng., 110(4):405-422, 1984. 10.1061/(ASCE)0733-9429(1987)113:1(120)\nS.L Neitsch, J.G Arnold, J.R Kiniry, and J.R Williams. SWAT Theoretical Documentation Version 2009. Texas Water Resources Institute, pages 1-647, 2011. 10.1016/j.scitotenv.2015.11.063\nC. Oeurng, S. Sauvage, and J.M. Sanchez-Perez. Assessment of hydrology, sediment and particulate organic carbon yield in a large agricultural catchment using the SWAT model. Journal of Hydrology, 401:145-153, 2011. 10.1016/j.hydrol.2011.02.017\nA. Simon, N. Pollen-Bankhead, and R.E Thomas. Development and application of a deterministic bank stability and toe erosion model for stream restoration. Geophysical Monograph Series, 194:453-474, 2011. 10.1029/2010GM001006\nG. Verstraeten and J. Poesen. Estimating trap efficiency of small reservoirs and ponds: methods and implications for the assessment of sediment yield. Progress in Physical Geography, 24(2):219-251, 2000. 10.1177/030913330002400204\nO. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, and J. Poesen. Adapting SWAT hillslope erosion model to predict sediment concentrations and yields in large Basins. Science of the Total Environment, 538:855-875, 2015. 10.1016/j.scitotenv.2015.08.095\nO. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, F. Obreja, J. Poesen, H. Habersack, J. Feher, and S. Groselj. Modelling sediment fluxes in the Danube River Basin with SWAT. Science of the Total Environment, 2017. 10.1016/j.scitotenv.2017.04.236","category":"page"},{"location":"user_guide/sample_data/#sample_data","page":"Example models","title":"Example models","text":"","category":"section"},{"location":"user_guide/sample_data/","page":"Example models","title":"Example models","text":"For each wflow Model a test model is available that can help to understand the data requirements and the usage of each Model. The TOML configuration file per available model are listed in the Table below:","category":"page"},{"location":"user_guide/sample_data/","page":"Example models","title":"Example models","text":"model TOML configuration file\nwflow_sbm + kinematic wave sbm_config.toml\nwflow_sbm + groundwater flow sbm_gwf_config.toml\nwflow_hbv hbv_config.toml\nwflow_flextopo flextopo_config.toml\nwflow_sediment sediment_config.toml","category":"page"},{"location":"user_guide/sample_data/","page":"Example models","title":"Example models","text":"The associated Model files (input static, forcing and state files) can easily be downloaded and for this we share the following Julia code (per Model) that downloads the required files to your current working directory. For running these test model see also Usage and Command Line Interface.","category":"page"},{"location":"user_guide/sample_data/#wflow_sbm_data","page":"Example models","title":"wflow_sbm + kinematic wave","text":"","category":"section"},{"location":"user_guide/sample_data/","page":"Example models","title":"Example models","text":"# urls to TOML and netCDF of the Moselle example model\ntoml_url = \"https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sbm_config.toml\"\nstaticmaps = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.9/staticmaps-moselle.nc\"\nforcing = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.6/forcing-moselle.nc\"\ninstates = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.6/instates-moselle.nc\"\n\n# create a \"data\" directory in the current directory\ndatadir = joinpath(@__DIR__, \"data\")\nmkpath(datadir)\ntoml_path = joinpath(@__DIR__, \"sbm_config.toml\")\n\n# download resources to current and data dirs\ndownload(staticmaps, joinpath(datadir, \"staticmaps-moselle.nc\"))\ndownload(forcing, joinpath(datadir, \"forcing-moselle.nc\"))\ndownload(instates, joinpath(datadir, \"instates-moselle.nc\"))\ndownload(toml_url, toml_path)","category":"page"},{"location":"user_guide/sample_data/#wflow_sbm-groundwater-flow","page":"Example models","title":"wflow_sbm + groundwater flow","text":"","category":"section"},{"location":"user_guide/sample_data/","page":"Example models","title":"Example models","text":"# urls to TOML and netCDF of the Moselle example model\ntoml_url = \"https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sbm_gwf_config.toml\"\nstaticmaps = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.3/staticmaps-sbm-groundwater.nc\"\nforcing = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.1/forcing-sbm-groundwater.nc\"\n\n# create a \"data\" directory in the current directory\ndatadir = joinpath(@__DIR__, \"data\")\nmkpath(datadir)\ntoml_path = joinpath(@__DIR__, \"sbm_gwf_config.toml\")\n\n# download resources to current and data dirs\ndownload(staticmaps, joinpath(datadir, \"staticmaps-sbm-groundwater.nc\"))\ndownload(forcing, joinpath(datadir, \"forcing-sbm-groundwater.nc\"))\ndownload(toml_url, toml_path)","category":"page"},{"location":"user_guide/sample_data/#wflow_hbv","page":"Example models","title":"wflow_hbv","text":"","category":"section"},{"location":"user_guide/sample_data/","page":"Example models","title":"Example models","text":"# urls to TOML and netCDF of the Moselle example model\ntoml_url = \"https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/hbv_config.toml\"\nstaticmaps = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.1/staticmaps-lahn.nc\"\nforcing = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.0/forcing-lahn.nc\"\n\n# create a \"data\" directory in the current directory\ndatadir = joinpath(@__DIR__, \"data\")\nmkpath(datadir)\ntoml_path = joinpath(@__DIR__, \"hbv_config.toml\")\n\n# download resources to current and data dirs\ndownload(staticmaps, joinpath(datadir, \"staticmaps-lahn.nc\"))\ndownload(forcing, joinpath(datadir, \"forcing-lahn.nc\"))\ndownload(toml_url, toml_path)","category":"page"},{"location":"user_guide/sample_data/#wflow_flextopo_data","page":"Example models","title":"wflow_flextopo","text":"","category":"section"},{"location":"user_guide/sample_data/","page":"Example models","title":"Example models","text":"# urls to TOML and netCDF of the Meuse example model\ntoml_url = \"https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/flextopo_config.toml\"\nstaticmaps = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.8/staticmaps_flex_meuse.nc\"\nforcing = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.8/forcing_meuse.nc\"\n\n# create a \"data\" directory in the current directory\ndatadir = joinpath(@__DIR__, \"data\")\nmkpath(datadir)\ntoml_path = joinpath(@__DIR__, \"flextopo_config.toml\")\n\n# download resources to current and data dirs\ndownload(staticmaps, joinpath(datadir, \"staticmaps_flex_meuse.nc\"))\ndownload(forcing, joinpath(datadir, \"forcing_meuse.nc\"))\ndownload(toml_url, toml_path)","category":"page"},{"location":"user_guide/sample_data/#wflow_sediment","page":"Example models","title":"wflow_sediment","text":"","category":"section"},{"location":"user_guide/sample_data/","page":"Example models","title":"Example models","text":"# urls to TOML and netCDF of the Moselle example model\ntoml_url = \"https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sediment_config.toml\"\nstaticmaps = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.3/staticmaps-moselle-sed.nc\"\nforcing = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.3/forcing-moselle-sed.nc\"\ninstates = \"https://github.com/visr/wflow-artifacts/releases/download/v0.2.0/instates-moselle-sed.nc\"\n\n# create a \"data\" directory in the current directory\ndatadir = joinpath(@__DIR__, \"data\")\nmkpath(datadir)\ntoml_path = joinpath(@__DIR__, \"sediment_config.toml\")\n\n# download resources to current and data dirs\ndownload(staticmaps, joinpath(datadir, \"staticmaps-moselle-sed.nc\"))\ndownload(forcing, joinpath(datadir, \"forcing-moselle-sed.nc\"))\ndownload(instates, joinpath(datadir, \"instates-moselle-sed.nc\"))\ndownload(toml_url, toml_path)","category":"page"},{"location":"model_docs/model_configurations/#Model-configurations","page":"Model configurations","title":"Model configurations","text":"","category":"section"},{"location":"model_docs/model_configurations/#wflow_sbm","page":"Model configurations","title":"wflow_sbm","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Wflow_sbm represents hydrological models derived from the CQflow model (Köhler et al., 2006) that have the SBM vertical concept in common, but can have different lateral concepts that control how water is routed for example over the land or river domain. The soil part of SBM is largely based on the Topog_SBM model but has had considerable changes over time. Topog_SBM is specifically designed to simulate fast runoff processes in small catchments while the wflow_sbm model can be applied more widely. The main differences are for the vertical concept SBM of wflow_sbm:","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The unsaturated zone can be split-up in different layers\nThe addition of evapotranspiration losses\nThe addition of a capillary rise\nThe addition of water demand and allocation","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The water demand and allocation computations are supported by the wflow_sbm model configurations:","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"SBM + Kinematic wave\nSBM + Groundwater flow\nSBM + Local inertial river\nSBM + Local inertial river (1D) and land (2D)","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The vertical SBM concept is explained in more detail in the following section SBM vertical concept.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Topog_SBM uses an element network based on contour lines and trajectories for water routing. Wflow_sbm models differ in how the lateral components river, land, and subsurface are solved. Below the different wflow_sbm model configurations are described.","category":"page"},{"location":"model_docs/model_configurations/#config_sbm","page":"Model configurations","title":"SBM + Kinematic wave","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"For the lateral components of this wflow_sbm model water is routed over a D8 network, and the kinematic wave approach is used for river, overland and lateral subsurface flow. This is described in more detail in the section Kinematic wave.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"An overview of the different processes and fluxes in the wflow_sbm model with the kinematic wave approach for river, overland and lateral subsurface flow:","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"(Image: wflow_sbm model)","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Below the mapping for this wflow_sbm model (type sbm) to the vertical SBM concept (instance of struct SBM) and the different lateral concepts is presented. For an explanation about the type parameters between curly braces after the struct name see the section on the model parameters.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"vertical => struct SBM{T,N,M}\nlateral.subsurface => struct LateralSSF{T}\nlateral.land => struct SurfaceFlow{T,R,L}\nlateral.river => struct SurfaceFlow{T,R,L}\nlateral.river.lake => struct NaturalLake{T} # optional\nlateral.river.reservoir => struct SimpleReservoir{T} # optional","category":"page"},{"location":"model_docs/model_configurations/#config_sbm_gwf","page":"Model configurations","title":"SBM + Groundwater flow","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"For river and overland flow the kinematic wave approach over a D8 network is used for this wflow_sbm model. For the subsurface domain, an unconfined aquifer with groundwater flow in four directions (adjacent cells) is used. This is described in more detail in the section Groundwater flow.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"[model]\ntype = \"sbm_gwf\"\n\n[input.lateral.subsurface]\nksathorfrac = \"KsatHorFrac\"\nconductivity = \"conductivity\"\nspecific_yield = \"specific_yield\"\nexfiltration_conductance = \"exfilt_cond\"\ninfiltration_conductance = \"infilt_cond\"\nriver_bottom = \"river_bottom\"\nconductivity_profile = \"exponential\"\ngwf_f.value = 3.0","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Below the mapping for this wflow_sbm model (type sbm_gwf) to the vertical SBM concept (instance of struct SBM) and the different lateral concepts. For an explanation about the type parameters between curly braces after the struct name see the section on model parameters.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"vertical => struct SBM{T,N,M}\nlateral.subsurface.flow => struct GroundwaterFlow{A, B}\nlateral.subsurface.recharge => struct Recharge{T} <: AquiferBoundaryCondition\nlateral.subsurface.river => struct River{T} <: AquiferBoundaryCondition\nlateral.subsurface.drain => struct Drainage{T} <: AquiferBoundaryCondition # optional\nlateral.land => struct SurfaceFlow{T,R,L}\nlateral.river => struct SurfaceFlow{T,R,L}\nlateral.river.lake => struct NaturalLake{T} # optional\nlateral.river.reservoir => struct SimpleReservoir{T} # optional","category":"page"},{"location":"model_docs/model_configurations/#config_sbm_gwf_lie_river","page":"Model configurations","title":"SBM + Local inertial river","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"By default the model types sbm and sbm_gwf use the kinematic wave approach for river flow. There is also the option to use the local inertial model for river flow with an optional 1D floodplain schematization (routing is done separately for the river channel and floodplain), by providing the following in the TOML file:","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"[model]\nriver_routing = \"local-inertial\" # optional, default is \"kinematic-wave\"\nfloodplain_1d = true # optional, default is false","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Only the mapping for the river component changes, as shown below. For an explanation about the type parameters between curly braces after the struct name see the section on the model parameters.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"lateral.river => struct ShallowWaterRiver{T,R,L}","category":"page"},{"location":"model_docs/model_configurations/#config_sbm_gwf_lie_river_land","page":"Model configurations","title":"SBM + Local inertial river (1D) and land (2D)","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"By default the model types sbm and sbm_gwf use the kinematic wave approach for river and overland flow. There is also the option to use the local inertial model for 1D river and 2D overland flow, by providing the following in the TOML file:","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"[model]\nriver_routing = \"local-inertial\"\nland_routing = \"local-inertial\"","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The mapping for the river and land component changes, as shown below. For an explanation about the type parameters between curly braces after the struct name see the section on the model parameters.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"lateral.river => struct ShallowWaterRiver{T,R,L}\nlateral.land => struct ShallowWaterLand{T}","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The local inertial approach is described in more detail in the section Local inertial model.","category":"page"},{"location":"model_docs/model_configurations/#config_hbv","page":"Model configurations","title":"wflow_hbv","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The Hydrologiska Byrans Vattenbalansavdelning (HBV) model was introduced back in 1972 by the Swedish Meteological and Hydrological Institute (SMHI). The HBV model is mainly used for runoff simulation and hydrological forecasting. The model is particularly useful for catchments where snow fall and snow melt are dominant factors, but application of the model is by no means restricted to these type of catchments.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The model is based on the HBV-96 model. However, the hydrological routing represented in HBV by a triangular function controlled by the MAXBAS parameter has been removed. Instead, the kinematic wave function is used to route the water downstream. All runoff that is generated in a cell in one of the HBV reservoirs is added to the kinematic wave reservoir at the end of a timestep. There is no connection between the different HBV cells within the model.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"A catchment is divided into a number of grid cells. For each of the cells individually, daily runoff is computed through application of the HBV-96 of the HBV model. The use of the grid cells offers the possibility to turn the HBV modelling concept, which is originally lumped, into a distributed model.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"(Image: wflow_hbv model)","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The figure above shows a schematic view of hydrological response simulation with the HBV-modelling concept. The land-phase of the hydrological cycle is represented by three different components: a snow routine, a soil routine and a runoff response routine. Each component is discussed in more detail below.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The vertical HBV concept is described in section HBV vertical concept. The routing for river and overland flow is described in the section Kinematic wave.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Below the mapping for wflow_hbv (type hbv) to the vertical HBV concept (instance of struct HBV) and the different lateral concepts. For an explanation about the type parameters between curly braces after the struct name see the section on model parameters.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"vertical => struct HBV{T}\nlateral.subsurface => struct LateralSSF{T}\nlateral.land => struct SurfaceFlow{T,R,L}\nlateral.river => struct SurfaceFlow{T,R,L}\nlateral.river.lake => struct NaturalLake{T} # optional\nlateral.river.reservoir => struct SimpleReservoir{T} # optional","category":"page"},{"location":"model_docs/model_configurations/#config_flextopo","page":"Model configurations","title":"wflow_flextopo","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The FLEXTopo model is a process-based model, which consists of different parallel classes connected through their groundwater storage. These classes are usually delineated from topographical data to represent the variability in hydrological processes across user-defined Hydrological Response Units (HRU). The main assumption underlying the concept, which was first introduced by Savenije (2010), is that different parts of the landscape fulfill different tasks in runoff generation and, hence, can be represented by different model structures. The strength of the concept is that the definition of classes and associated model structures is modular and flexible and not fixed to a predefined model structure. The flexible approach allows to develop process-based models for different topographic, climatic, geologic and land use conditions, making use of the available data and expert knowledge.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The kinematic wave function is used to route the water downstream. In a similar way as for HBV, all runoff that is generated in a cell in one of the FLEXTopo storages is added to the kinematic wave reservoir at the end of a timestep. There is no connection between the different vertical FLEXTopo cells within the model. The FLEXTopo model is implemented in a fully distributed way in the wflow Julia framework.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"In wflow_flextopo, the user is free to determine the number of classes and which model components to include or exclude for each class, this is done in the TOML file. Currently, for each storage, it is possible to bypass the storage and pass on the fluxes to the next model component. Interested users can contribute to the code by adding other conceptualizations for each storage components.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"[model]\ntype = \"flextopo\"\nclasses = [\"h\", \"p\", \"w\"] #user can set the number and name of each class.\n\n# for each component which is class specific, the user can select which conceptualization\n# to apply for each class as defined above in classes = [\"h\", \"p\", \"w\"]\nselect_snow = [\"common_snow_hbv\"]\n# available options are [\"common_snow_hbv\", \"common_snow_no_storage\"]\nselect_interception = [\"interception_overflow\", \"interception_overflow\", \"interception_overflow\"]\n# available options are [\"interception_overflow\", \"interception_no_storage\"]\nselect_hortonponding = [\"hortonponding_no_storage\", \"hortonponding_no_storage\", \"hortonponding_no_storage\"]\n# available options are [\"hortonponding\", \"hortonponding_no_storage\"]\nselect_hortonrunoff = [\"hortonrunoff_no_storage\", \"hortonrunoff_no_storage\", \"hortonrunoff_no_storage\"]\n# available options are [\"hortonrunoff\", \"hortonrunoff_no_storage\"]\nselect_rootzone = [\"rootzone_storage\", \"rootzone_storage\", \"rootzone_storage\"]\n# available options are [\"rootzone_storage\", \"rootzone_no_storage\"]\nselect_fast = [\"fast_storage\", \"fast_storage\", \"fast_storage\"]\n# available options are [\"fast_storage\", \"fast_no_storage\"]\nselect_slow = [\"common_slow_storage\"]\n# available options are [\"common_slow_storage\", \"slow_no_storage\"]","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"A schematic representation of the most complete model structure including all storage components, as currently implemented in the code, is shown in the Figure below. When setting up the model with multiple classes, model structures can be adapted by bypassing storages or turning parameter values on or off (e.g.: percolation or capillary rise, non-linear versus linear outflow of the fast runoff etc.), an example of a three class model is shown in FLEXTopo vertical concept.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"(Image: flextopo_julia_1class.png) Schematic representation of the FLEXTopo model for a single class model including all storages and fluxes. Main parameters are denoted in red.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"In the staticmaps, the user needs to provide maps of the fraction of each class within each cell, as shown below with hrufrac. For each model parameter which is class specific, an extra dimension classes is required in the staticmaps netcdf. For an example model, see FLEXTopo example model.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"[input.vertical]\nhrufrac = \"hrufrac_lu\"","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Parameter multiplication of model parameters which are defined for several classes is possible through the TOML file:","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"[input.vertical.kf]\nnetcdf.variable.name = \"kf\"\nscale = [1.0, 3.0, 4.0]\noffset = [0.0, 0.0, 0.0]\nclass = [\"h\", \"p\", \"w\"]","category":"page"},{"location":"model_docs/model_configurations/#config_sediment","page":"Model configurations","title":"wflow_sediment","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The processes and fate of many particles and pollutants impacting water quality at the catchment level are intricately linked to the processes governing sediment dynamics. Both nutrients such as phosphorus, carbon or other pollutants such as metals are influenced by sediment properties in processes such as mobilization, flocculation or deposition. To better assert and model water quality in inland systems, a better comprehension and modelling of sediment sources and fate in the river is needed at a spatial and time scale relevant to such issues.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"The wflow_sediment model was developed to answer such issues. It is a distributed physics-based model, based on the distributed hydrologic wflow_sbm model. It is able to simulate both land and in-stream processes, and relies on available global datasets, parameter estimation and small calibration effort.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"In order to model the exports of terrestrial sediment to the coast through the Land Ocean Aquatic Continuum or LOAC (inland waters network such as streams, lakes...), two different modelling parts were considered. The first part, called the inland sediment model, is the modelling and estimation of soil loss and sediment yield to the river system by land erosion, separated into vertical Soil Erosion processes and lateral Sediment Flux in overland flow. The second part, called the River Sediment Model is the transport and processes of the sediment in the river system. The two parts together constitute the wflow_sediment model.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Overview of the concepts of the wflow_sediment model: (Image: wflow_sediment)","category":"page"},{"location":"model_docs/model_configurations/#Configuration","page":"Model configurations","title":"Configuration","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"As sediment generation and transport processes are linked to the hydrology and water flows, the inputs to the wflow_sediment model come directly from a hydrological model. The required dynamic inputs to run wflow_sediment are:","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Precipitation (can also come from the hydrological forcing data),\nLand runoff (overland flow) from the kinematic wave,\nRiver runoff from the kinematic wave,\nLand water level in the kinematic wave,\nRiver water level in the kinematic wave,\nRainfall interception by the vegetation.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"These inputs can be obtained from other wflow models such as wflow_sbm, wflow_hbv or from other sources.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Model outputs can be saved for both the inland and the instream part of the model. Some examples are listed below.","category":"page"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"[output.vertical]\n# Soil splash erosion [ton]\nsedspl = \"sedspl\"\n# Soil erosion by overland flow [ton]\nsedov = \"sedov\"\n# Total soil loss [ton]\nsoilloss = \"soilloss\"\n# Total transport capacity of overland flow [ton]\nTCsed = \"TCsed\"\n# Transport capacity per particle class (clay) [ton]\nTCclay = \"TCclay\"\n\n[output.lateral.land]\n# Total (or per particle class) sediment flux in overland flow [ton]\nolsed = \"olsed\"\nolclay = \"olclay\"\n# Total (or per particle class) sediment yield to the river [ton]\ninlandsed = \"inlandsed\"\ninlandclay = \"inlandclay\"\n\n[output.lateral.river]\n# Total sediment concentration in the river (suspended + bed load) [kg/m3]\nSedconc = \"Sedconc\"\n# Suspended load [kg/m3]\nSSconc = \"SSconc\"\n# Bed load [kg/m3]\nBedconc = \"Bedconc\"","category":"page"},{"location":"model_docs/model_configurations/#References","page":"Model configurations","title":"References","text":"","category":"section"},{"location":"model_docs/model_configurations/","page":"Model configurations","title":"Model configurations","text":"Köhler, L., Mulligan, M., Schellekens, J., Schmid, S., Tobón, C., 2006, Hydrological impacts of converting tropical montane cloud forest to pasture, with initial reference to northern Costa Rica. Final Technical Report DFID‐FRP Project No. R799.\nSavenije, H. H. G. (2010). HESS opinions “topography driven conceptual modelling (FLEX-Topo).” Hydrology and Earth System Sciences, 14(12), 2681–2692. https://doi.org/10.5194/hess-14-2681-2010","category":"page"},{"location":"changelog/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"All notable changes to this project will be documented in this file.","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.","category":"page"},{"location":"changelog/#v0.8.1-2024-08-27","page":"Changelog","title":"v0.8.1 - 2024-08-27","text":"","category":"section"},{"location":"changelog/#Fixed","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Reduce allocations in update of vertical SBM concept.","category":"page"},{"location":"changelog/#v0.8.0-2024-08-19","page":"Changelog","title":"v0.8.0 - 2024-08-19","text":"","category":"section"},{"location":"changelog/#Fixed-2","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Added missing BMI function get_grid_size, it is used for unstructured grids, for example to get the length of arrays returned by BMI functions get_grid_x and get_grid_y.\nAdded a check for the solution of the quadratic equation as part of the Modified Puls approach for lake outflow. Lower limit should be zero (very small negative values can occur).\nLimit lake evaporation (added variable actevap) and lake outflow to prevent negative lake storage. The variable actevap has also been added to the reservoir module.\nThe set_states function for model type sbm with local inertial routing for river and land component.\nInflow to reservoir and lake locations for local inertial routing: 1) with floodplain routing, the floodplain discharge was not added to the inflow of these locations, 2) the to_river variable from overland flow and lateral subsurface flow was not added to the inflow of these locations.\nClose netCDF NCDataset with state variables in extended BMI function save_state.\nFor the computation of Gash interception model parameter e_r multiply the precipitation input with the canopy fraction (this was only done for the potential evapotranspiration input).\nFunction BMI.update_until could throw an InexactError: Int64 caused by a not whole number, representing how many times (steps) an update of a wflow model is required. This is fixed by using divrem for the computation of the number of steps in this function. An error is thrown when the absolute remainder of divrem is larger than eps(), or when the number of steps is negative.\nFixed internal and external broken links in docs. \nThe internal time step of the local inertial model (stable_timestep function) can get zero when LoopVectorization is applied (@tturbo) to the for loop of these functions. This issue occured on a virtual machine, Windows 10 Enterprise, with Intel(R) Xeon(R) Gold 6144 CPU (2 processors). This has been fixed by replacing @tturbo with reduction of Polyester.jl.\nFixed required states of the model type sbm_gwf: added h_av for the river and land domain.\nFor the constanthead boundary of GroundwaterFlow the head should not be changed (was set to top elevation of the aquifer if head > top), and exfiltwater should be 0 for these boundary cells.","category":"page"},{"location":"changelog/#Changed","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Stop exposing scalar variables through BMI. The BMI.get_value_ptr function was not working correctly for scalar model variables (a view was applied). Only a few scalar model parameters are defined, and it is not expected that exposing these variables is required (e.g. for model coupling) while code changes for these variables (including struct fields) are required.\nThe local inertial routing (constant) river boundary condition depth at a ghost node (downstream river outlet) was set at 0.0 in the code and can now be provided through the model parameter netCDF file (riverdepth_bc). In addition, the boundary condition river length dl at a ghost node should be set through the model parameter netCDF file (riverlength_bc), providing this boundary condition through the [model] settings in the TOML file (model.riverlength_bc) has been deprecated.\nAs part of the vertical SBM concept: 1) add variable net_runoff (land runoff minus actual open water evaporation ae_openw_l) and 2) change the definition of variable runoff by removing the subtraction of ae_openw_l (total land runoff). The variable net_runoff is now input to the kinematic wave for overland flow (replaces the original runoff variable as input). The lower limit of the original runoff variable was set at zero, which may result in water balance errors. This lower limit was implemented in the Python version of wflow_sbm, to avoid a very slow kinematic wave solution for surface flow computation (no distinction between a kinematic wave for overland and river flow). When in the Python version of wflow_sbm the kinematic wave for surface flow was split into a river and land component, the lower limit was removed for river runoff (net_runoff_river), but not for land runoff.\nAlways use fractions for the computation of potential evapotranspiration (interception and transpiration) and potential evaporation (open water and soil). Replaced variable et_reftopot by crop coefficient kc (use of et_reftopot has been deprecated).\nFor improved code readability it is now discouraged to use non-ASCII characters for the names of variables, structs, functions and macros. Using the non-ASCII character for built-in operators is still allowed. This change in naming convention is now in effect and all invalid uses of non-ASCII characters have been replaced by ASCII equivalents.\nDocs: 1) improved description of different model configurations in model-setup.md, also in relation to hydromt_wflow in docs, 2) citing info related to wflow_sbm publication in Geosci. Model Dev. (from in review to published).\nRoot water uptake reduction (Feddes): 1) extend critical pressure head parameters with h3_low and h3_high, 2) all critical pressure head parameters can be set (values for h1, h2 and h3 were fixed) and 3) the root water uptake reduction coefficient alpha can be set at 0 (default is 1) at critical pressure head h1 (through the model parameter alpha_h1).\nFor the actual transpiration computation in SBM, the potential transpiration is partitioned over the soil layers with roots according to the model parameter rootfraction (fraction of the total root length in a soil layer). Previously, for each soil layer (from top to bottom) the actual transpiration was computed, and the remaining potential transpiration was used in the next soil layer.","category":"page"},{"location":"changelog/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Total water storage as an export variable for SBM concept. This is the total water stored per grid cell in millimeters. Excluded from this variable are the floodplain, lakes and reservoirs.\nChecks to see if all states are covered in the .toml file. If not all states are covered, an error is thrown. If there are more states specified than required, these states are ignored (with a warning in the logging), and the simulation will continue.\nSupport different vertical hydraulic conductivity profiles for the SBM concept. See also the following sections: The SBM soil water accounting scheme and Subsurface flow routing for a short description.\nLocal inertial routing to sbm_gwf model type.\nWater demand and allocation computations for model types sbm and sbm_gwf.","category":"page"},{"location":"changelog/#v0.7.3-2024-01-12","page":"Changelog","title":"v0.7.3 - 2024-01-12","text":"","category":"section"},{"location":"changelog/#Fixed-3","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Documentation: add leakage term to the wflow_sbm figure, document external input parameter ksathorfrac and fix description of adding external inflow to the kinematic wave.\nFixed BMI functions (e.g. BMI.get_value) that deviated from BMI specifications (BasicModelInterface.jl), including function arguments, return types and the BMI specification that arrays are always flattened (this was not the case for variables stored as 2-dimensional arrays or as vector of SVectors).\nBump compat for NCDatasets to 0.13, 0.14.\nThe solution for lake outflow as part of the Modified Puls Approach. The inflow and outflow variables are defined for period Δt, and not at t1 and t2 (instantaneous) as in the original mass balance equation of the Modified Puls Approach. Because of this, the terms of the quadratic equation (and solution) were fixed.\nUse kvfrac for the computation of vertical saturated hydraulic conductivity at the bottom of the soil layer, since kvfrac is also used for the computation of vertical unsaturated flow.","category":"page"},{"location":"changelog/#Changed-2","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"For cyclic parameters different cyclic time inputs are supported (only one common cyclic time (for example daily or monthly) was allowed).\nBMI: 1) added grid information (type and location) and whether a variable can be exchanged to metadata Structs, 2) extend model grid functions for wflow components that store variables on edges (local inertial model) with get_grid_edge_count and get_grid_edge_nodes.","category":"page"},{"location":"changelog/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Functions for loading and saving states and getting the starttime in Unix time format. This is convenient for coupling with OpenDA (and other external) software. The set states functionality from the initialization function has been moved to a separate set_states function for each Model type, to support loading states independent of initialization.","category":"page"},{"location":"changelog/#v0.7.2-2023-09-27","page":"Changelog","title":"v0.7.2 - 2023-09-27","text":"","category":"section"},{"location":"changelog/#Fixed-4","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Water balance of modified Rutter interception model. The sum of the stemflow partitioning coefficient pt and free throughfall coefficient p could get larger than 1, resulting in an overestimation of stemflow and throughfall amounts and negative net interception amounts. And the first drainage amount dd, controlled by a change over time in canopy storage capacity cmax, should not be subtracted from precipitation to compute net interception.\nThe netinterception (net interception) computed by the modified Rutter interception model was stored as interception in SBM, while this should be the interception (interception loss by evaporation) output of the modified Rutter interception model. The interception of SBM is used to compute the total actual evapotranspiration actevap.","category":"page"},{"location":"changelog/#v0.7.1-2023-06-30","page":"Changelog","title":"v0.7.1 - 2023-06-30","text":"","category":"section"},{"location":"changelog/#Fixed-5","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"State initialization of 1D floodplain volume. In the initialization function the wrong field name of type FloodPlainProfile was used (area instead of a).","category":"page"},{"location":"changelog/#v0.7.0-2023-06-12","page":"Changelog","title":"v0.7.0 - 2023-06-12","text":"","category":"section"},{"location":"changelog/#Fixed-6","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"BMI.get_time_units now gets called on the model rather than the type, like all other BMI functions, except BMI.initialize. Also it returns \"s\" instead of \"seconds since 1970-01-01T00:00:00\", in line with the BMI specification.\nAdded the interception component to total actual evapotranspiration actevap of SBM (was defined as the sum of soil evaporation, transpiration and open water evaporation).","category":"page"},{"location":"changelog/#Changed-3","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The time values returned in the BMI interface are no longer in seconds since 1970, but in seconds since the model start time. This is more in line with standard BMI practices.\nThe starttime was defined one model timestep Δt ahead of the actual model time (the initial conditions timestamp (state time)). As a consequence this was also the case for the current model time. To allow for an easier interpretation of wflow time handling, either through BMI or directly, the starttime is now equal to the state time, resulting in current model times without an offset.\nUsing more than 8 threads can result in too much overhead with Threads.@threads. After performance testing, this has been changed for kinematic wave routing and the vertical SBM concept to spawning tasks with Threads@spawn for number of threads <= 8, where each task iterates over a chunk of size basesize. For more than 8 threads the low overhead threading Polyester.@batch (including the minbatch argument) is used. For local inertial routing the use of Threads.@threads has been changed to threaded loop vectorization (river and 1D floodplain local inertial momentum equation) and Polyester.@batch.","category":"page"},{"location":"changelog/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"For (regulated) lakes with rating curve of type 1 (H-Q table), lake storage above the maximumstorage (based on maximum water level from the H-Q table) is spilled instantaneously (overflow) from the lake.\nAdded support to use sum as a reducer function for csv and scalar output options.","category":"page"},{"location":"changelog/#v0.6.3-2023-03-01","page":"Changelog","title":"v0.6.3 - 2023-03-01","text":"","category":"section"},{"location":"changelog/#Fixed-7","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Removed error when _FillValue is present in the time dimension of the forcing netCDF file. The simulation is allowed to continue with the attribute present, given that there are no missing values in the time dimension. This is checked by the code, and an error is thrown if this is the case.\nColumn index of daily lake rating curves. This was incorrectly based on dayofyear with a maximum of 365. The column index should be based on julian day (leap days are not counted).","category":"page"},{"location":"changelog/#Changed-4","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"NCDatasets version. Reading the time dimension of multifile netCDF file became very slow since NCDatasets v0.12.4, this issue has been solved in v0.12.11.\nStore the time dimension of the forcing netCDF file as part of the struct NCreader instead of calling dataset[\"time\"][:] each time step when loading forcing data.","category":"page"},{"location":"changelog/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Show total duration of simulation in the log file (info), and show the current time at execution of each timestep (debug).\nSupport for exponential decline in horizontal conductivity in the sbm_gwf concept. This can be enabled using the conductivity_profile setting (either \"uniform\" or \"exponential\"). If set to \"exponential\", it exponentially reduces the kh0 (or conductivity) based on the value of gwf_f to the actual horizontal conductivity (k).\nAn optional 1D floodplain schematization for the river flow inertial model, based on provided flood volumes as a function of flood depth per river cell. See also the following sections: SBM + Local inertial river and River and floodplain routing for a short description, and the following section for associated model parameters.","category":"page"},{"location":"changelog/#v0.6.2-2022-09-01","page":"Changelog","title":"v0.6.2 - 2022-09-01","text":"","category":"section"},{"location":"changelog/#Fixed-8","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Two issues related to reservoir and lake locations as part of local inertial model: 1) added as boundary points to the update of overland flow, 2) fixed check reservoir and lake location in update river flow.\nLimit flow (qx, qy and q) in local inertial model when water is not available (set to zero).\nIn the grid output netCDFs, don't set the _FillValue attribute, since the CF conventions don't allow it.\nGlacier parameter g_sifrac needs to be converted during initialization (time dependent).\nThe check that the sum of adaptive timesteps (Δt) of the local inertial model (1D and 2D) does not exceed the model timestep.","category":"page"},{"location":"changelog/#Changed-5","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Changed depth h for reservoir and lake locations as part of the river local inertial model from bankfull_depth to zero.","category":"page"},{"location":"changelog/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"External inflow to the SBM + Local inertial river (1D) and land (2D) model configuration.","category":"page"},{"location":"changelog/#v0.6.1-2022-04-26","page":"Changelog","title":"v0.6.1 - 2022-04-26","text":"","category":"section"},{"location":"changelog/#Fixed-9","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Fixed an error with the log file, when writing to a folder that does not (yet) exists. Now, the folder is created prior to writing the log file.\nFixed a MethodError for read_dims, thrown when reading netCDF data with NCDatasets.jl 0.12.3 or higher.","category":"page"},{"location":"changelog/#v0.6.0-2022-04-14","page":"Changelog","title":"v0.6.0 - 2022-04-14","text":"","category":"section"},{"location":"changelog/#Added-6","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The FLEXTopo model.\nSet a (different) uniform value for each index of input parameters with an extra dimension. A list of values (instead of one uniform value) that should be equal to the length of the extra dimension can be provided in the TOML file. See also Modify parameters.\nModify input parameters with an extra dimension at multiple indices with different scale and offset values, through the TOML file. See also Modify parameters.\nAdded support for netCDF compression for gridded model output, through the option compressionlevel in the [output] section in the TOML file. The setting defaults to 0 (no compression), but all levels between 0 and 9 can be used.","category":"page"},{"location":"changelog/#Changed-6","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Re-organized the documentation: moved explanation of different model concepts to a model documentation section, added a user guide to explain setting up the model, added new figures to the description of wflow_sbm.\nThe unit of lateral subsurface flow ssf of LateralSSF is now m^3 d^-1. The unit was m^3 t^-1, where t is the model timestep. Other flow variables are already stored independently from t, this allows for easier interpretation and to use states independently of t.\nChanged the reference level of water depth h and h_av of 2D overland flow (ShallowWaterLand) for cells containing a river from river bed elevation zb to cell elevation z.","category":"page"},{"location":"changelog/#Fixed-10","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Fixed calculation of average water depth h_av of 2D overland flow (ShallowWaterLand) with the local inertial approach. The summation of h was not correct, resulting in too low values for h_av. For river cells of 2D overland flow h_av was only updated as part of the river domain (ShallowWaterRiver), this value is now also updated as part of the land domain (ShallowWaterLand).\nFixed the following two flow width issues for 2D overland flow of the local inertial model: 1) The flow widths xwidth and ywidth were mapped incorrectly (reversed) to the flow calculation in x and y direction, respectively. 2) For river cells the effective flow width for overland flow was not determined correctly: the riverwidth vector supplied to the function set_effective_flowwidth! covered the complete model domain and should have covered the river domain, resulting in incorrect river widths and thus incorrect effective flow widths for river cells.","category":"page"},{"location":"changelog/#v0.5.2-2022-02-03","page":"Changelog","title":"v0.5.2 - 2022-02-03","text":"","category":"section"},{"location":"changelog/#Changed-7","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Model types sbm_gwf and hbv use the same approach for the calculation of the drain width dw as model type sbm.\nRenamed h_bankfull parameter to bankfull_depth for consistency between kinematic-wave and local-inertial river routing. When using the old name under the [input.lateral.river] section of the TOML file, it will work but it is suggested to update the name.","category":"page"},{"location":"changelog/#Added-7","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Additional log messages and log file as output, see also Logging.\nOption to use the local inertial model for river flow as part of the sbm model type. See also SBM + Local inertial river.\nOption to use the local inertial model for 1D river flow combined with 2D overland flow as part of the sbm model type. See also SBM + Local inertial river (1D) and land (2D).","category":"page"},{"location":"changelog/#Fixed-11","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Model type hbv: the surface width for overland flow was not corrected with the river width.\nFixed use of absolute path for path_forcing in TOML file, which gave an error in wflow v0.5.1.\nFixed a crash when glacier processes are simulated as part of the hbv concept (Δt was not defined).\nWhen the surface flow width for overland flow is zero, the water level h of the kinematic wave should not be calculated, otherwise this results in NaN values. When the model is initialized from state files, q and h are set to zero for indices with a zero surface flow width.\nFixed how number of iterations its for kinematic wave river flow are calculated during initialization when using a fixed sub-timestep (specified in the TOML file). For a model timestep smaller than the fixed sub-timestep an InexactError was thrown.\nFixed providing a cyclic parameter when the netCDF variable is read during model initialization with ncread, this gave an error about the size of the netCDF time dimension.\nFixed CSV and netCDF scalar output of variables with dimension layer (SVector).","category":"page"},{"location":"changelog/#v0.5.1-2021-11-24","page":"Changelog","title":"v0.5.1 - 2021-11-24","text":"","category":"section"},{"location":"changelog/#Fixed-12","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Fixed calculation of exfiltwater as part of the sbm_gwf model type. This was based directly on groundwater head above the surface level, without multiplying by the specific_yield, resulting in an overestimation of exfiltwater. This is required since the groundwater model estimates the head by dividing the volume by the specific yield or storativity of the aquifer. So, should the groundwater table rise above surface level, the head above surface level does not represent a water column one to one. (This also means the groundwater model (slightly) overestimates heads when the head rises above the surface level. However, this water is immediately removed, and the head will be set to surface level.)","category":"page"},{"location":"changelog/#Added-8","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Optional dir_input and dir_output keys in the TOML, which can be used to quickly change the path for all input or output files that are given as a relative path.","category":"page"},{"location":"changelog/#v0.5.0-2021-11-12","page":"Changelog","title":"v0.5.0 - 2021-11-12","text":"","category":"section"},{"location":"changelog/#Changed-8","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Scaling of potential capillary rise is replaced by a common approach found in literature, based on the water table depth zi, a maximum water depth cap_hmax beyond which capillary rise ceases, and a coefficient cap_n. See also Capillary rise. Multiplying the scaling factor with the ratio of model time step and basetimestep in the original approach resulted in (much) smaller capillary fluxes at sub-daily model time steps compared to daily model time steps, and is not used in the new approach. Parameters cap_hmax and cap_n can be set through the TOML file, parameter capscale of the previous approach is not used anymore.","category":"page"},{"location":"changelog/#Fixed-13","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Conversion of GroundwaterFlow boundaries [m^3 d^-1] as part of model concept sbm_gwf to m^3 s^-1 for sub-daily model time steps. For the conversion the basetimestep (86400 s) should be used (and not the model time step).","category":"page"},{"location":"changelog/#v0.4.1-2021-11-04","page":"Changelog","title":"v0.4.1 - 2021-11-04","text":"","category":"section"},{"location":"changelog/#Changed-9","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The alpha parameter of the kinematic wave has a fixed value now and is not updated because of changes in water height (this could result in large water balance errors). See also Surface routing.\nCyclic input for other structs than vertical are also now supported (for example cyclic inflow to the river).\nMoved update_forcing! and update_cyclic! functions to the run function. It is now easier to implement a custom run function with custom loading of input data (forcing and cyclic parameters).","category":"page"},{"location":"changelog/#Added-9","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Check if reservoirs and lakes have downstream nodes. Without downstream nodes is not supported and in that case an error message is thrown that is easier to understand than the previous one: \"ArgumentError: Collection is empty, must contain exactly 1 element.\"\nFor the input.path_forcing TOML setting we use Glob.jl to expand strings like \"data/forcing-year-*.nc\" to a set of netCDF files that are split in time.\nExternal water inflow (supply/abstractions) added to the kinematic wave inflow in m3/s. It is added/removed to sf.qlat[v] before computing the new q[v] with the kinematic wave equation.\nFixed values for forcing parameters are supported, see also Fixed forcing values.","category":"page"},{"location":"changelog/#Added-10","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Option to use the local inertial model for river flow as part of the SBM + Kinematic wave. See also SBM + Local inertial river.","category":"page"},{"location":"changelog/#Fixed-14","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"River inflow for reservoirs and lakes in the kinematic wave. This inflow was based on sf.q[v] at the previous time step, and this has been fixed to the current time step.","category":"page"},{"location":"changelog/#v0.4.0-2021-09-02","page":"Changelog","title":"v0.4.0 - 2021-09-02","text":"","category":"section"},{"location":"changelog/#Changed-10","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Changed length units for lateral subsurface flow component from millimeter to meter. This means that state netCDF files from previous versions can only be reused if ssf is divided by 10^9.\nAdd snow and glacier processes to wflow_sbm figure of the documentation.","category":"page"},{"location":"changelog/#Added-11","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Multi-threading of vertical SBM concept and lateral kinematic wave components (overland, river and subsurface flow) of wflow_sbm model SBM + Kinematic wave.\nImproved error message for CSV Reducer.\nThe TOML keys kv₀, θᵣ and θₛ have been replaced with the ASCII versions kv_0, theta_r and theta_s, to avoid encoding issues with certain text editors. The old keys still work as well.","category":"page"},{"location":"changelog/#Fixed-15","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Calculation of volumetric water content of vertical SBM (soil layers and root zone).\nUpdate of satwaterdepth in SBM (evaporation was only subtracted from a local variable, and not from sbm.satwaterdepth).\nFixed the index lowerlake_ind of NaturalLake. Linked lakes were not simulated correctly (flows between upstream and downstream lake).\nInterpolation function interpolate_linear(x, xp, fp) for CSV tables lakes. When x was larger or smaller than xp, maximum(xp) or minimum(xp) was returned instead of maximum(fp) or minimum(fp).\nFixed model timestep of reservoirs (SimpleReservoir) and lakes (NaturalLake) in relation to precipitation and evapotranspiration fluxes. This was set to the fixed wflow basetimestep of 86400 s, and should be set to the actual model time step from the TOML configuration file.\nAdd flux from Drainage (GroundwaterFlow) in the sbm_gwf_model to the overland flow component instead of the river component of the kinematic wave.\nFixed option constanthead = false (TOML file), constant_head field of GroundwaterFlow was not defined in this case. Fixed this by initializing empty fields (Vector) for struct ConstantHead.\nFixed return max(0, boundary.flux[index]) to return max(0, flux) the flux should be returned when cell is dry, no negative value allowed.\nFixed path to initialize lake to: dirname(static_path)\nFixed outflow = 0, when lake level is below lake threshold. Before a negative value could enter the log function and model would fail.\nFixed the lake storage initialization. For continuation runs (reinit = false), this caused the lake to be reset to the initial conditions instead of the saved state.","category":"page"},{"location":"changelog/#v0.3.1-2021-05-19","page":"Changelog","title":"v0.3.1 - 2021-05-19","text":"","category":"section"},{"location":"changelog/#Fixed-16","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Ignore extra dimensions in input netCDFs if they are size 1","category":"page"},{"location":"changelog/#v0.3.0-2021-05-10","page":"Changelog","title":"v0.3.0 - 2021-05-10","text":"","category":"section"},{"location":"changelog/#Changed-11","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"New deposition process for coarse sediment in the reservoirs with a new parameter restrapefficiency in the sediment model.\nNew variables added to the LandSediment and RiverSediment structs in order to save more output from the sediment model.\nAdded variables volume and inwater to SurfaceFlow struct, this is convenient for the coupling with the water quality model Delwaq.\nRiver water level (h) and discharge (q) forced directly into the RiverSediment struct (instead of using the OverlandFlowSediment struct first).\nRequire Julia 1.6 or later.","category":"page"},{"location":"changelog/#Added-12","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Modify model parameters and forcing through the TOML file (see Modify parameters).\nRun wflow_sbm (SBM + kinematic wave) in two parts (until recharge and after subsurface flow) from BMI, including the option to switch off the lateral subsurface component of wflow_sbm.\nSupport more netCDF dimension and axis order variants.","category":"page"},{"location":"changelog/#Fixed-17","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Corrected a bug in sediment deposition in the river (case when incoming sediment load is more than the river transport capacity).\nFixed update of snow and glacierstore fields of HBV and SBM concepts by the glacier_hbv module.","category":"page"},{"location":"changelog/#v0.2.0-2021-03-26","page":"Changelog","title":"v0.2.0 - 2021-03-26","text":"","category":"section"},{"location":"changelog/#Changed-12","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Removed dependency of the f model parameter of wflow_sbm on the parameters theta_s, theta_r and M. This approach is used in Topog_SBM, but not applicable for wflow_sbm. The f parameter needs to be provided as part of the netCDF model parameter file.\nGrid properties as cell length and elevation now stored as part of the model.land.network component and not as part of the vertical model components, as it is not used by these components. altitude (elevation) should now be provided as part of the [input] section of the TOML configuration file, and not as part of the [input.vertical] section.\nRemoved parameter theta_e from SBM struct (not used in update). Parameters theta_s and theta_r included separately (instead of theta_e) in LateralSSF struct, now directly linked to SBM parameters.\nImprove error messages (netCDF and cyclic flow graph).","category":"page"},{"location":"changelog/#Added-13","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Export of netCDF scalar timeseries (separate netCDF file from gridded timeseries). This also allows for importing these timeseries by Delft-FEWS (General Adapter).","category":"page"},{"location":"changelog/#Fixed-18","page":"Changelog","title":"Fixed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Model parameter Manning's n now used during the update of the struct SurfaceFlow, to change the related alpha parameter of the kinematic wave for channel flow.","category":"page"},{"location":"model_docs/params_vertical/#params_vert","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"","category":"section"},{"location":"model_docs/params_vertical/#params_sbm","page":"Parameters vertical concepts","title":"SBM","text":"","category":"section"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows the parameters (fields) of struct SBM, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.vertical] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter. For example, internal model parameter sl is mapped as follows in the TOML file to the external netCDF variable Sl:","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"[input.vertical]\nspecific_leaf = \"Sl\"","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"Different vertical hydraulic conductivity depth profiles: exponential (default), exponential_constant, layered and layered_exponential can be provided through the TOML file. Below an example for the exponential_constant profile:","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"[input.vertical]\nksat_profile = \"exponential_constant\"","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"For the exponential profile the input parameters kv_0 and f are used. For the exponential_constant profile kv_0 and f are used, and z_exp is required as input. For the layered profile, input parameter kv is used, and for the layered_exponential profile kv is used and z_layered is required as input.","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"parameter description unit default\ncfmax degree-day factor mm ᵒC^-1 Δt^-1 3.75653 mm ᵒC^-1 day^-1\ntt threshold temperature for snowfall ᵒC 0.0\ntti threshold temperature interval length ᵒC 1.0\nttm threshold temperature for snowmelt ᵒC 0.0\nwhc water holding capacity as fraction of current snow pack - 0.1\nw_soil soil temperature smooth factor - 0.1125\ncf_soil controls soil infiltration reduction factor when soil is frozen - 0.038\ng_tt threshold temperature for snowfall above glacier ᵒC 0.0\ng_cfmax Degree-day factor for glacier mm ᵒC^-1 Δt^-1 3.0 mm ᵒC^-1 day^-1\ng_sifrac fraction of the snowpack on top of the glacier converted into ice Δt^-1 0.001 day^-1\nglacierfrac fraction covered by a glacier - 0.0\nglacierstore water within the glacier mm 5500.0\ntheta_s saturated water content (porosity) - 0.6\ntheta_r residual water content - 0.01\nkv_0 Vertical hydraulic conductivity at soil surface mm Δt^-1 3000.0 mm day^-1\nkv Vertical hydraulic conductivity per soil layer mm Δt^-1 1000.0 mm day^-1\nf scaling parameter (controls exponential decline of kv_0) mm^-1 0.001\nz_exp Depth from soil surface for which exponential decline of kv_0 is valid mm -\nz_layered Depth from soil surface for which layered profile (of layered_exponential) is valid mm -\nhb air entry pressure of soil (Brooks-Corey) cm -10.0\nsoilthickness soil thickness mm 2000.0\ninfiltcappath infiltration capacity of the compacted areas mm Δt^-1 10.0 mm day^-1\ninfiltcapsoil soil infiltration capacity mm Δt^-1 100.0 mm day^-1\nmaxleakage maximum leakage from saturated zone mm Δt^-1 0.0 mm day^-1\nc Brooks-Corey power coefficient for each soil layer - 10.0\nkvfrac multiplication factor applied to kv_z (vertical flow) - 1.0\nwaterfrac fraction of open water (excluding rivers) - 0.0\npathfrac fraction of compacted area - 0.01\nrootingdepth rooting depth mm 750.0\nrootfraction fraction of the root length density in each soil layer - -\nh1 soil water pressure head h1 of the root water uptake reduction function (Feddes) cm 0.0 cm\nh2 soil water pressure head h2 of the root water uptake reduction function (Feddes) cm -100.0 cm\nh3_high soil water pressure head h3_high of the root water uptake reduction function (Feddes) cm -400.0 cm\nh3_low soil water pressure head h3_low of the root water uptake reduction function (Feddes) cm -1000.0 cm\nh4 soil water pressure head h4 of the root water uptake reduction function (Feddes) cm -15849.0 cm\nalpha_h1 root water uptake reduction at soil water pressure head h1 (0.0 or 1.0) - 1.0\nrootdistpar controls how roots are linked to water table - -500.0\ncap_hmax water depth beyond which capillary flux ceases mm 2000.0\ncap_n coefficient controlling capillary rise - 2.0\nkc crop coefficient Kc - 1.0\nsl (specific_leaf) specific leaf storage mm -\nswood (storage_wood) storage woody part of vegetation mm -\nkext extinction coefficient (to calculate canopy gap fraction) - -\ncmax maximum canopy storage mm 1.0\ne_r (eoverr) Gash interception model parameter - 0.1\ncanopygapfraction canopy gap fraction - 0.1\ndt model time step s -\nmaxlayers maximum number of soil layers - -\nn number of grid cells - -\nnlayers number of soil layers - -\nn_unsatlayers number of unsaturated soil layers - -\nnlayers_kv number of soil layers with vertical hydraulic conductivity value kv - -\nriverfrac fraction of river - -\nact_thickl thickness of soil layers mm -\nsumlayers cumulative sum of soil layers thickness, starting at soil surface mm -\nstemflow stemflow mm Δt^-1 -\nthroughfall throughfall mm Δt^-1 -\nustorelayerdepth amount of water in the unsaturated store, per layer mm -\nsatwaterdepth saturated store mm -\nzi pseudo-water table depth (top of the saturated zone) mm -\nsoilwatercapacity soilwater capacity mm -\ncanopystorage canopy storage mm -\nprecipitation precipitation mm Δt^-1 -\ntemperature temperature ᵒC -\npotential_evaporation potential reference evapotranspiration mm Δt^-1 -\npottrans interception subtracted from potential evapotranspiration mm Δt^-1 -\ntranspiration transpiration mm Δt^-1 -\nae_ustore actual evaporation from unsaturated store mm Δt^-1 -\ninterception interception loss by evaporation mm Δt^-1 -\nsoilevap total soil evaporation from unsaturated and saturated store mm Δt^-1 -\nsoilevapsat soil evaporation from saturated store mm Δt^-1 -\nactcapflux actual capillary rise mm Δt^-1 -\nactevapsat actual transpiration from saturated store mm Δt^-1 -\nactevap total actual evapotranspiration mm Δt^-1 -\nrunoff_river runoff from river based on riverfrac mm Δt^-1 -\nrunoff_land runoff from land based on waterfrac mm Δt^-1 -\nae_openw_l actual evaporation from open water (land) mm Δt^-1 -\nae_openw_r actual evaporation from river mm Δt^-1 -\nnet_runoff_river net runoff from river (runoff_river - ae_openw_r) mm Δt^-1 -\navail_forinfilt water available for infiltration mm Δt^-1 -\nactinfilt actual infiltration into the unsaturated zone mm Δt^-1 -\nactinfiltsoil actual infiltration into non-compacted fraction mm Δt^-1 -\nactinfiltpath actual infiltration into compacted fraction mm Δt^-1 -\ninfiltsoilpath infiltration into the unsaturated zone mm Δt^-1 -\ninfiltexcess infiltration excess water mm Δt^-1 -\nexcesswater water that cannot infiltrate due to saturated soil (saturation excess) mm Δt^-1 -\nexfiltsatwater water exfiltrating during saturation excess conditions mm Δt^-1 -\nexfiltustore water exfiltrating from unsaturated store because of change in water table mm Δt^-1 -\nexcesswatersoil excess water for non-compacted fraction mm Δt^-1 -\nexcesswaterpath excess water for compacted fraction mm Δt^-1 -\nrunoff total surface runoff from infiltration and saturation excess mm Δt^-1 -\nnet_runoff net surface runoff (runoff - ae_openw_l) mm Δt^-1 -\nvwc volumetric water content per soil layer (including theta_r and saturated zone) - -\nvwc_perc volumetric water content per soil layer (including theta_r and saturated zone) % -\nrootstore root water storage in unsaturated and saturated zone (excluding theta_r) mm -\nvwc_root volumetric water content in root zone (including theta_r and saturated zone) - -\nvwc_percroot volumetric water content in root zone (including theta_r and saturated zone) % -\nustoredepth total amount of available water in the unsaturated zone mm -\ntransfer downward flux from unsaturated to saturated zone mm Δt^-1 -\nrecharge net recharge to saturated zone mm Δt^-1 -\nactleakage actual leakage from saturated store mm Δt^-1 -\nsnow snow storage mm -\nsnowwater liquid water content in the snow pack mm -\nrainfallplusmelt snowmelt + precipitation as rainfall mm Δt^-1 -\ntsoil top soil temperature ᵒC -\nleaf_area_index leaf area index m^2 m-2 -\nwaterlevel_land water level land mm -\nwaterlevel_river water level river mm -\ntotal_storage total water storage (excluding floodplains, lakes and reservoirs) mm -\npaddy optional paddy (rice) fields of type Paddy (water demand and irrigation) - -\nnonpaddy optional non-paddy fields of type NonPaddy (water demand and irrigation) - -\ndomestic optional domestic water demand of type NonIrrigationDemand - -\nlivestock optional livestock water demand of type NonIrrigationDemand - -\nindustry optional industry water demand of type NonIrrigationDemand - -\nallocation optional water allocation of type AllocationLand - -","category":"page"},{"location":"model_docs/params_vertical/#params_hbv","page":"Parameters vertical concepts","title":"HBV","text":"","category":"section"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows the parameters (fields) of struct HBV, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"parameter description unit default\ncfmax degree-day factor mm ᵒC^-1 Δt^-1 3.75653 mm ᵒC^-1 day^-1\ntt threshold temperature for snowfall ᵒC -1.41934\ntti threshold temperature interval length ᵒC 1.0\nttm threshold temperature for snowmelt ᵒC -1.41934\nwhc water holding capacity as fraction of current snow pack - 0.1\ng_tt threshold temperature for snowfall above glacier ᵒC 0.0\ng_cfmax Degree-day factor for glacier mm ᵒC^-1 Δt^-1 3.0 mm ᵒC^-1 day^-1\ng_sifrac fraction of the snowpack on top of the glacier converted into ice Δt^-1 0.001 day^-1\nglacierfrac fraction covered by a glacier - 0.0\nglacierstore water within the glacier mm 5500.0\nfc field capacity mm 260.0\nbetaseepage exponent in soil runoff generation equation - 1.8\nlp fraction of field capacity below which actual evaporation=potential evaporation - 0.53\nk4 recession constant baseflow Δt^-1 0.02307 day^-1\nkquickflow recession constant upper reservoir Δt^-1 0.09880 day^-1\nsuz Level over which k0 is used mm 100.0\nk0 recession constant upper reservoir Δt^-1 0.30 day^-1\nkhq recession rate at flow hq Δt^-1 0.09880 day^-1\nhq high flow rate hq for which recession rate of upper reservoir is known mm Δt^-1 3.27 mm day^-1\nalphanl measure of non-linearity of upper reservoir - 1.1\nperc percolation from upper to lower zone mm Δt^-1 0.4 mm day^-1\ncfr refreezing efficiency constant in refreezing of freewater in snow - 0.05\npcorr correction factor for precipitation - 1.0\nrfcf correction factor for rainfall - 1.0\nsfcf correction factor for snowfall - 1.0\ncflux maximum capillary rise from runoff response routine to soil moisture routine mm Δt^-1 2.0 mm day^-1\nicf maximum interception storage (in forested and non-forested areas) mm 2.0\ncevpf correction factor for potential evaporation - 1.0\nepf exponent of correction factor for evaporation on days with precipitation mm^-1 1.0\necorr evaporation correction - 1.0\nprecipitation precipitation mm Δt^-1 -\ntemperature temperature ᵒC -\npotential_evaporation potential evapotranspiration mm Δt^-1 -\npotsoilevap potential soil evaporation mm Δt^-1 -\nsoilevap soil evaporation mm Δt^-1 -\nintevap evaporation from interception storage mm Δt^-1 -\nactevap actual evapotranspiration (intevap + soilevap) mm Δt^-1 -\ninterceptionstorage actual interception storage mm -\nsnowwater available free water in snow mm -\nsnow snow pack mm -\nrainfallplusmelt snow melt + precipitation as rainfall mm Δt^-1 -\nsoilmoisture actual soil moisture mm -\ndirectrunoff direct runoff to upper zone mm Δt^-1 -\nhbv_seepage recharge to upper zone mm Δt^-1 -\nin_upperzone water inflow into upper zone mm Δt^-1 -\nupperzonestorage water content of the upper zone mm -\nquickflow specific runoff (quickflow part) mm Δt^-1 -\nreal_quickflow specific runoff (quickflow), if K upper zone is precalculated mm Δt^-1 -\npercolation actual percolation to the lower zone mm Δt^-1 -\ncapflux capillary rise mm Δt^-1 -\nlowerzonestorage water content of the lower zone mm -\nbaseflow specific runoff (baseflow part) per cell mm Δt^-1 -\nrunoff total specific runoff per cell mm Δt^-1 -","category":"page"},{"location":"model_docs/params_vertical/#params_flextopo","page":"Parameters vertical concepts","title":"FLEXtopo","text":"","category":"section"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows the parameters (fields) of struct FLEXTOPO, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"parameter description unit default\ncfmax degree-day factor mm ᵒC^-1 Δt^-1 3.75653 mm ᵒC^-1 day^-1\ntt threshold temperature for snowfall ᵒC -1.41934\ntti threshold temperature interval length ᵒC 1.0\nttm threshold temperature for snowmelt ᵒC -1.41934\nwhc water holding capacity as fraction of current snow pack - 0.1\ncfr refreezing efficiency constant in refreezing of freewater in snow - 0.05\ng_tt threshold temperature for snowfall above glacier ᵒC 0.0\ng_cfmax Degree-day factor for glacier mm ᵒC^-1 Δt^-1 3.0 mm ᵒC^-1 day^-1\ng_sifrac fraction of the snowpack on top of the glacier converted into ice Δt^-1 0.001 day^-1\nglacierfrac fraction covered by a glacier - 0.0\nglacierstore water within the glacier mm 5500.0\necorr evaporation correction - 1.0\npcorr correction factor for precipitation - 1.0\nrfcf correction factor for rainfall - 1.0\nsfcf correction factor for snowfall - 1.0\nimax maximum interception storage (I_mathrmmax) mm 3.0\nshmax maximum horton ponding storage capacity (S_mathrmHmax) mm 30.0\nsrmax maximum root zone storage capacity (S_mathrmRmax) mm 260.0\nbeta exponent in soil runoff generation equation - 0.3\nlp fraction of root zone capacity below which actual evaporation=potential evaporation (L_mathrmP) - 0.3\nks recession constant slow groundwater storage (K_mathrmS) Δt^-1 0.006 day^-1\nkf recession constant fast storage (K_mathrmF) Δt^-1 0.1 day^-1\nkhf recession constant horton runoff storage (K_mathrmHf) Δt^-1 0.5 day^-1\nalfa measure of non-linearity of upper reservoir (alpha) - 1.0\nperc maximum percolation flux from root zone to slow storage (Q_mathrmpercmax) mm Δt^-1 0.30 mm day^-1\ncap maximum capillary rise from slow storage to root zone (Q_mathrmcapmax) mm Δt^-1 0.20 mm day^-1\nds splitter parameter determining fraction of root zone outflow to slow storage (d_mathrms) - 0.2\nshmin minimum storage capacity in horton ponding (relative to S_mathrmHmax) (S_mathrmHmin) [-] 0.2\nfacc0 maximum modelled accumulated frost resulting in shmin (F_mathrmaccfr0) [ᵒC Δt] -3.0\nfacc1 minimum modelled accumulated frost resulting in shmin (F_mathrmaccfr1) [ᵒC Δt] 0.0\nfdec exponent for the decline of infiltration capacity (F_mathrmdec) [-] 0.2\nfmax maximum infiltration capacity from horton ponding (F_mathrmmax) [mm Δt^-1] 2.0\nkmf melt coefficient of frozen topsoil (K_mathrmmf) [-] 1.0\nhrufrac fraction of class within cell (F_mathrmhrufrac) - 1/length(classes)\nprecipitation precipitation mm Δt^-1 -\ntemperature temperature ᵒC -\npotential_evaporation potential evapotranspiration mm Δt^-1 -\nprecipcorr corrected precipitation mm Δt^-1 -\nepotcorr corrected potential evaporation mm Δt^-1 -\nsnow snow water (S_mathrmW) mm -\nsnowwater available free water in snow mm -\ninterceptionstorage interception storage (S_mathrmI) mm -\ninterceptionstorage_m average interception storage over classes (S_mathrmI) mm -\nhortonpondingstorage horton ponding storage (S_mathrmHp) mm -\nhortonpondingstorage_m average horton ponding storage over classes (S_mathrmHp) mm -\nhortonrunoffstorage horton runoff storage (S_mathrmHf) mm -\nhortonrunoffstorage_m average horton runoff storage over classes (S_mathrmHf) mm -\nrootzonestorage root zone storage (S_mathrmR) mm -\nrootzonestorage_m average root zone storage over classes (S_mathrmR) mm -\nfaststorage fast storage (S_mathrmF) mm -\nfaststorage_m average fast storage over classes (S_mathrmF) mm -\nslowstorage slow storage (S_mathrmS) mm -\npotsoilevap potential soil evaporation (E_mathrmP) mm Δt^-1 -\nsoilevap soil evaporation mm Δt^-1 -\nintevap evaporation from interception storage (E_mathrmI) mm Δt^-1 -\nintevap_m average evaporation from interception storage over classes (E_mathrmI) mm Δt^-1 -\nhortonevap evaporation from horton ponding storage (E_mathrmH) mm Δt^-1 -\nhortonevap_m average evaporation from horton ponding storage over classes (E_mathrmH) mm Δt^-1 -\nrootevap evaporation from root zone storage (E_mathrmR) mm Δt^-1 -\nrootevap_m average evaporation from root zone storage over classes (E_mathrmR) mm Δt^-1 -\nactevap actual evapotranspiration (intevap + hortonevap + rootevap) (E_mathrmA) mm Δt^-1 -\nactevap_m average actual evapotranspiration (intevap + hortonevap + rootevap) over classes (E_mathrmA) mm Δt^-1 -\nprecipeffective Effective precipitation (P_mathrmE) mm Δt^-1 -\nrainfallplusmelt snow melt + precipitation as rainfall (P_mathrmM + P_mathrmR) mm Δt^-1 -\nsnowmelt snowfall mm Δt^-1 -\nsnowfall snowfall mm Δt^-1 -\nfacc modeled accumulated frost ᵒC Δt -\nqhortonpond Flux from the hortonian ponding storage to the hortonian runoff storage (Q_mathrmH) mm Δt^-1 -\nqhortonrootzone Flux from the hortonian ponding storage to the root zone storage (Q_mathrmHR) mm Δt^-1 -\nqhortonrun Flux from the hortonian runoff storage (Q_mathrmHf) mm Δt^-1 -\nqrootzone Flux from the root zone storage (Q_mathrmR) mm Δt^-1 -\nqrootzonefast Pref. recharge to fast storage (Q_mathrmRF) mm Δt^-1 -\nqrootzoneslow_m Pref. recharge to slow storage sum classes (Q_mathrmRS) mm Δt^-1 -\nqcapillary Capillary flux from the slow to the root-zone storage (Q_mathrmcap) mm Δt^-1 -\nqcapillary_m Capillary flux from the slow to the root-zone storage sum classes (Q_mathrmcap) mm Δt^-1 -\nqpercolation Percolation flux from the root-zone to the slow storage (Q_mathrmperc) mm Δt^-1 -\nqpercolation_m Percolation flux from the root-zone to the slow storage sum classes (Q_mathrmperc) mm Δt^-1 -\nqfast runoff from fast storage (Q_mathrmF) mm Δt^-1 -\nqfast_tot sum of fast runoff (from fast and horton runoff storages) over classes mm Δt^-1 -\nqslow runoff from slow storage (Q_mathrmS) mm Δt^-1 -\nrunoff total specific runoff per cell (qslow + qfast_tot) (Q) mm Δt^-1 -\nwb_tot total water balance mm Δt^-1 -","category":"page"},{"location":"model_docs/params_vertical/#params_sediment","page":"Parameters vertical concepts","title":"Sediment","text":"","category":"section"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows external parameters that can be set through static input data (netCDF), and can be listed in the TOML configuration file under [input.vertical]. These external parameters are not part of struct LandSediment, but used to calculate parameters of struct LandSediment.","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"external parameter description unit default\npclay percentage clay % 0.1\npsilt percentage silt % 0.1\nresareas reservoir coverage - -\nlakeareas lake coverage - -","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows the parameters (fields) of struct LandSediment, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical], to map the internal model parameter to the external netCDF variable. For some input parameters the parameter listed under [input.vertical] is not equal to the internal model parameter, these are listed in the Table below between parentheses after the internal model parameter. For example, internal model parameter sl is mapped as follows in the TOML file to the external netCDF variable Sl:","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"[input.vertical]\nspecific_leaf = \"Sl\"","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"parameter description unit default\ncanopyheight canopy height m 3.0\nerosk coefficient for EUROSEM rainfall erosion - 0.6\nerosspl exponent for EUROSEM rainfall erosion - 2.0\nerosov coefficient for ANSWERS overland flow erosion - 0.9\npathfrac fraction of impervious area per grid cell - 0.01\nslope land slope - 0.01\nusleC USLE crop management factor - 0.01\nusleK USLE soil erodibility factor - 0.1\nsl (specific_leaf) specific leaf storage mm -\nswood (storage_wood) storage woody part of vegetation mm -\nkext extinction coefficient (to calculate canopy gap fraction) - -\ncmax maximum canopy storage mm 1.0\ncanopygapfraction canopy gap fraction - 0.1\ndmclay median diameter particle size class clay µm 2.0\ndmsilt median diameter particle size class silt µm 10.0\ndmsand median diameter particle size class sand µm 200.0\ndmsagg median diameter particle size class small aggregates µm 30.0\ndmlagg median diameter particle size class large aggregates µm 500.0\nrhos (rhosed) density of sediment kg m^-31 2650.0\nn number of cells - -\nyl length of cells in y direction m -\nxl length of cells in x direction m -\nriverfrac fraction of river - -\nwbcover waterbody coverage - -\nh_land depth of overland flow m -\ninterception canopy interception mm Δt^-1 -\nprecipitation precipitation mm Δt^-1 -\nq_land overland flow m^3 s^-1 -\nsedspl sediment eroded by rainfall ton Δt^-1 -\nsedov sediment eroded by overland flow ton Δt^-1 -\nsoilloss total eroded soil ton Δt^-1 -\nerosclay eroded soil for particle class clay ton Δt^-1 -\nerossilt eroded soil for particle class silt ton Δt^-1 -\nerossand eroded soil for particle class sand ton Δt^-1 -\nerossagg eroded soil for particle class small aggregates ton Δt^-1 -\neroslagg eroded soil for particle class large aggregates ton Δt^-1 -\nleaf_area_index leaf area index m^2 m^-2 -\ndl drain length m -\ndw flow width m -\ncGovers Govers transport capacity coefficient - -\nnGovers Govers transport capacity coefficient - -\nD50 median particle diameter of the topsoil mm -\nfclay fraction of particle class clay - -\nfsilt fraction of particle class silt - -\nfsand fraction of particle class sand - -\nfsagg fraction of particle class small aggregates - -\nflagg fraction of particle class large aggregates - -\nrivcell river cells - -\nTCsed total transport capacity of overland flow ton Δt^-1 -\nTCclay transport capacity of overland flow for particle class clay ton Δt^-1 -\nTCsilt transport capacity of overland flow for particle class silt ton Δt^-1 -\nTCsand transport capacity of overland flow for particle class sand ton Δt^-1 -\nTCsagg transport capacity of overland flow for particle class small aggregates ton Δt^-1 -\nTClagg transport capacity of overland flow for particle class large aggregates ton Δt^-1 -","category":"page"},{"location":"model_docs/params_vertical/#Water-demand-and-allocation","page":"Parameters vertical concepts","title":"Water demand and allocation","text":"","category":"section"},{"location":"model_docs/params_vertical/#Paddy","page":"Parameters vertical concepts","title":"Paddy","text":"","category":"section"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows the parameters (fields) of struct Paddy, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical.paddy], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"parameter description unit default\ndemand_gross irrigation gross demand mm Δt^-1 -\nirrigation_efficiency irrigation efficiency - -\nmaximum_irrigation_rate maximum irrigation rate mm Δt^-1 25.0 mm day^-1\nirrigation_areas irrigation areas - -\nirrigation_trigger irrigation on or off (boolean) - -\nh_min minimum required water depth in the irrigated paddy fields mm 20.0\nh_opt optimal water depth in the irrigated paddy fields mm 50.0\nh_max water depth when paddy field starts spilling water (overflow) mm 80.0\nh actual water depth in paddy field mm -","category":"page"},{"location":"model_docs/params_vertical/#Non-paddy","page":"Parameters vertical concepts","title":"Non-paddy","text":"","category":"section"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows the parameters (fields) of struct NonPaddy, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical.nonpaddy], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"parameter description unit default\ndemand_gross irrigation gross demand mm Δt^-1 -\nirrigation_efficiency irrigation efficiency - -\nmaximum_irrigation_rate maximum irrigation rate mm Δt^-1 25.0 mm day^-1\nirrigation_areas irrigation areas - -\nirrigation_trigger irrigation on or off (boolean) - -","category":"page"},{"location":"model_docs/params_vertical/#Non-irrigation-(industry,-domestic-and-livestock)","page":"Parameters vertical concepts","title":"Non-irrigation (industry, domestic and livestock)","text":"","category":"section"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows the parameters (fields) of struct NonIrrigationDemand, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF). These parameters can be listed for the sectors industry, domestic and livestock, in the TOML configuration file under [input.vertical.industry], [input.vertical.domestic] and [input.vertical.livestock], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"parameter description unit default\ndemand_gross gross industry water demand mm Δt^-1 0.0\ndemand_net net industry water demand mm Δt^-1 0.0\nreturnflow_fraction return flow fraction - -\nreturnflow return flow mm Δt^-1 -","category":"page"},{"location":"model_docs/params_vertical/#Water-allocation-land","page":"Parameters vertical concepts","title":"Water allocation land","text":"","category":"section"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"The Table below shows the parameters (fields) of struct AllocationLand, including a description of these parameters, the unit, and default value if applicable. The parameters in bold represent model parameters that can be set through static and forcing input data (netCDF), and can be listed in the TOML configuration file under [input.vertical.allocation], to map the internal model parameter to the external netCDF variable.","category":"page"},{"location":"model_docs/params_vertical/","page":"Parameters vertical concepts","title":"Parameters vertical concepts","text":"parameter description unit default\nirri_demand_gross irrigation gross demand mm Δt^-1 -\nnonirri_demand_gross non-irrigation gross demand mm Δt^-1 -\ntotal_gross_demand total gross demand mm Δt^-1 -\nfrac_sw_used fraction surface water used - 1.0\nareas allocation areas - 1\nsurfacewater_demand demand from surface water mm Δt^-1 -\nsurfacewater_alloc allocation from surface water mm Δt^-1 -\nact_groundwater_abst actual groundwater abstraction mm Δt^-1 -\nact_groundwater_abst_vol actual groundwater abstraction m^3 Δt^-1 -\navailable_groundwater available groundwater m^3 -\ngroundwater_demand groundwater_demand mm Δt^-1 -\ngroundwater_alloc allocation from groundwater mm Δt^-1 -\nirri_alloc allocated water for irrigation mm Δt^-1 -\nnonirri_alloc allocated water for non-irrigation mm Δt^-1 -\ntotal_alloc total allocated water mm Δt^-1 -\nnonirri_returnflow return flow from non-irrigation mm Δt^-1 -","category":"page"},{"location":"user_guide/step1_requirements/#Step-1:-Understanding-the-requirements","page":"Step 1: Understanding the requirements","title":"Step 1: Understanding the requirements","text":"","category":"section"},{"location":"user_guide/step1_requirements/","page":"Step 1: Understanding the requirements","title":"Step 1: Understanding the requirements","text":"To run wflow, several files are required. These include a settings file and input data. The input data is typically separated into static maps and forcing data, and both are provided in netCDF files, except for lake storage and rating curves that are supplied via CSV files. Below is a brief overview of the different files:","category":"page"},{"location":"user_guide/step1_requirements/","page":"Step 1: Understanding the requirements","title":"Step 1: Understanding the requirements","text":"The settings.toml file contains information on the simulation period, links to the input files (and their names in the netCDF files), and connect the correct variable names in the netCDF files to the variables and parameters of wflow.\nThe staticmaps.nc file contains spatial information such as elevation, gauge locations, land use, and drainage direction, etc. This file can also contain maps with parameter values.\nThe forcing.nc file contains time series data for precipitation, temperature and potential evaporation (as a 3D array).","category":"page"},{"location":"user_guide/step1_requirements/","page":"Step 1: Understanding the requirements","title":"Step 1: Understanding the requirements","text":"Wflow supports several model configurations, each requiring slightly different input, but with a similar general structure. A wflow model configuration consists of a vertical concept like SBM, HBV or FLEXTOPO in combination with lateral concepts that control how water is routed for example over the land or river domain. For the wflow_sbm model, different model configurations are possible. The following configurations are supported in wflow:","category":"page"},{"location":"user_guide/step1_requirements/","page":"Step 1: Understanding the requirements","title":"Step 1: Understanding the requirements","text":"wflow_sbm:\nSBM + kinematic wave for subsurface and surface flow\nSBM + kinematic wave for subsurface and overland flow + local inertial river (+ optional floodplain)\nSBM + kinematic wave for subsurface flow + local inertial river (1D) and land (2D)\nSBM + groundwater flow + kinematic wave for surface flow\nwflow_hbv: HBV + kinematic wave for surface routing\nwflow_flextopo: FLEXTOPO + kinematic wave for surface routing\nwflow_sediment as post processing of wflow_sbm or wflow_hbv output","category":"page"},{"location":"user_guide/step1_requirements/","page":"Step 1: Understanding the requirements","title":"Step 1: Understanding the requirements","text":"In the following pages, some examples will be given on how to prepare a basic wflow_sbm model. Sample data for other model configurations is provided in the sample data section.","category":"page"},{"location":"user_guide/step2_settings_file/#config_toml","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"A settings file is essential for wflow, as it contains information about the model configuration, simulation period, input files, and parameters. The settings are provided in a TOML file. The settings file is structured in several sections, which are explained below. The file paths provided in this file are relative to the location of the TOML file, or to dir_input and dir_output if they are specified.","category":"page"},{"location":"user_guide/step2_settings_file/#General-time-info","page":"Step 2: Preparing the settings file","title":"General time info","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"Time information is optional. When omitted, wflow will perform computations for each timestamp in the forcing netCDF file, except for the first forcing timestamp, which is considered equal to the initial conditions of the wflow model (state time). If you wish to calculate a subset of this time range, or a different timestep, you can specify a starttime, endtime and timestepsecs. The starttime is defined as the model state time. In the TOML file settings below, the starttime is 2000-01-01T00:00:00 (state time) and the first update (and output) of the wflow model is at 2000-01-02T00:00:00. The time_units optional information is used by the writer of the model, for model output in netCDF format. The calendar option allows you to calculate in one of the different CF conventions calendars provided by the CFTime.jl package, such as \"360_day\". This is useful if you want to calculate climate scenarios which are sometimes provided in these alternative calendars.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"calendar = \"standard\" # optional, this is the default value\nstarttime = 2000-01-01T00:00:00 # optional, default from forcing netCDF\nendtime = 2000-02-01T00:00:00 # optional, default from forcing netCDF\ntime_units = \"days since 1900-01-01 00:00:00\" # optional, this is the default value\ntimestepsecs = 86400 # optional, default from forcing netCDF\ndir_input = \"data/input\" # optional, default is the path of the TOML\ndir_output = \"data/output\" # optional, default is the path of the TOML","category":"page"},{"location":"user_guide/step2_settings_file/#logging_toml","page":"Step 2: Preparing the settings file","title":"Logging","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"Wflow prints logging messages at various levels such as debug, info, and error. These messages are sent to both the terminal and a log file. Note that logging to a file is only part of the Wflow.run(tomlpath::AbstractString) method. If you want to debug an issue, it can be helpful to set loglevel = \"debug\" in the TOML. To avoid flooding the screen, debug messages are only sent to the log file. The following settings will affect the logging:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"silent = false # optional, default is \"false\"\nloglevel = \"debug\" # optional, default is \"info\"\npath_log = \"log.txt\" # optional, default is \"log.txt\"\nfews_run = false # optional, default value is false","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"silent avoids logging to the terminal, and only writes to the log file. loglevel controls which levels are filtered out; for instance, the default setting \"info\" does not print any debug-level messages. Note that for finer control, you can also pass an integer log level. For details, see Julia's Logging documentation. path_log sets the desired output path for the log file. For information on fews_run, see Run from Delft-FEWS.","category":"page"},{"location":"user_guide/step2_settings_file/#Model-section","page":"Step 2: Preparing the settings file","title":"Model section","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"Model-specific settings can be included in the model section of the TOML file.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[model]\ntype = \"sbm\" # one of (\"sbm\", \"sbm_gwf, \"hbv\")\nmasswasting = false # include lateral snow transport in the model, default is false\nsnow = false # include snow modelling, default is false\nreinit = true # cold (reinit = true) or warm state (reinit = false), default is true\nreservoirs = false # include reservoir modelling, default is false\nkin_wave_iteration = false # enable kinematic wave iterations in the model, default is false\nthicknesslayers = [100, 300, 800] # specific SBM setting: for each soil layer, a thickness [mm] is specified\nmin_streamorder_river = 5 # minimum stream order to delineate subbasins for river domain, default is 6 (for multi-threading computing purposes)\nmin_streamorder_land = 4 # minimum stream order to delineate subbasins for land domain, default is 5 (for multi-threading computing purposes)\n","category":"page"},{"location":"user_guide/step2_settings_file/#State-options","page":"Step 2: Preparing the settings file","title":"State options","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"The state section in the TOML file provides information about the location of input and output states of the model. This section is mostly relevant if the model needs to start with a \"warm\" state (i.e. based on the results of a previous simulation). The example below shows how to save the output states of the current simulation, so it can be used to initialize another model in the future. Details on the settings required to start a model with a warm state can be found in the additional model options. If it is not required to store the outstates of the current simulation, the entire state section can be removed.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[state]\npath_input = \"instates-moselle.nc\"\npath_output = \"outstates-moselle.nc\"\n\n[state.vertical]\nsatwaterdepth = \"satwaterdepth\"\nsnow = \"snow\"\ntsoil = \"tsoil\"\nustorelayerdepth = \"ustorelayerdepth\"\nsnowwater = \"snowwater\"\ncanopystorage = \"canopystorage\"\n\n[state.lateral.river]\nq = \"q_river\"\nh = \"h_river\"\nh_av = \"h_av_river\"\n\n[state.lateral.river.reservoir]\nvolume = \"volume_reservoir\"\n\n[state.lateral.subsurface]\nssf = \"ssf\"\n\n[state.lateral.land]\nq = \"q_land\"\nh = \"h_land\"\nh_av = \"h_av_land\"","category":"page"},{"location":"user_guide/step2_settings_file/#Input-section","page":"Step 2: Preparing the settings file","title":"Input section","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"The input section of the TOML file contains information about the input forcing and model parameters files (in netCDF format). Forcing is applied to the vertical component of the model, and needs to be mapped to the external netCDF variable name. forcing lists the internal model forcing parameters, and these are mapped to the external netCDF variables listed under the section [input.vertical]. It is possible to provide cyclic parameters to the model (minimum time step of 1 day). In the example below, the internal vertical.leaf_area_index model parameter is mapped to the external netCDF variable \"LAI\" variable. Cyclic time inputs of parameters can be different (e.g., daily or monthly). The time dimension name of these cylic input parameters in the model parameter netCDF file should start with \"time\". If a model parameter is not mapped, a default value will be used, if available.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[input]\n# use \"forcing-year-*.nc\" if forcing files are split in time\npath_forcing = \"forcing-moselle.nc\" # Location of the forcing data\npath_static = \"staticmaps-moselle.nc\" # Location of the static data\n\n# these are not directly part of the model\ngauges = \"wflow_gauges\"\nldd = \"wflow_ldd\"\nriver_location = \"wflow_river\"\nsubcatchment = \"wflow_subcatch\"\n\n# specify the internal IDs of the parameters which vary over time\n# the external name mapping needs to be below together with the other mappings\nforcing = [\n\"vertical.precipitation\",\n\"vertical.temperature\",\n\"vertical.potential_evaporation\",\n]\n\ncyclic = [\"vertical.leaf_area_index\"]\n\n[input.vertical] # Map internal model variable/parameter names to variable names in the netCDF files\naltitude = \"wflow_dem\"\nc = \"c\"\ncf_soil = \"cf_soil\"\ncfmax = \"Cfmax\"\ne_r = \"EoverR\"\ninfiltcappath = \"InfiltCapPath\"\ninfiltcapsoil = \"InfiltCapSoil\"\nkext = \"Kext\"\n\"kv_0\" = \"KsatVer\"\nleaf_area_index = \"LAI\" # Cyclic variable\nm = \"M\"\nmaxleakage = \"MaxLeakage\"\npathfrac = \"PathFrac\"\npotential_evaporation = \"PET\" # Forcing variable\nprecipitation = \"P\" # Forcing variable\nrootdistpar = \"rootdistpar\"\nrootingdepth = \"RootingDepth\"\nsoilminthickness = \"SoilMinThickness\"\nsoilthickness = \"SoilThickness\"\nspecific_leaf = \"Sl\"\nstorage_wood = \"Swood\"\ntemperature = \"TEMP\" # Forcing variable\ntt = \"TT\"\ntti = \"TTI\"\nttm = \"TTM\"\nw_soil = \"wflow_soil\"\nwater_holding_capacity = \"WHC\"\nwaterfrac = \"WaterFrac\"\n\"theta_r\" = \"thetaR\"\n\"theta_s\" = \"thetaS\"\n\n[input.lateral.river]\nlength = \"wflow_riverlength\"\nn = \"N_River\"\nslope = \"RiverSlope\"\nwidth = \"wflow_riverwidth\"\n\n[input.lateral.subsurface]\nksathorfrac = \"KsatHorFrac\"\n\n[input.lateral.land]\nn = \"N\"\nslope = \"Slope\"","category":"page"},{"location":"user_guide/step2_settings_file/#Output-netCDF-section","page":"Step 2: Preparing the settings file","title":"Output netCDF section","text":"","category":"section"},{"location":"user_guide/step2_settings_file/#Grid-data","page":"Step 2: Preparing the settings file","title":"Grid data","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"This optional section of the TOML file specifies the output netCDF file for writing gridded model output. It includes a mapping between internal model parameter components and external netCDF variables.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"To limit the size of the resulting netCDF file, file compression can be enabled. Compression increases computational time but can significantly reduce the size of the netCDF file. Set the compressionlevel variable to a value between 0 and 9. A setting of 0 means no compression, while values between 1 and 9 indicate increasing levels of compression (1: least compression, minimal run-time impact, 9: highest compression, maximum run-time impact). If file size is a concern, we recommend using a value of 1, as higher compression levels generally have a limited effect on file size.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[output]\npath = \"output_moselle.nc\" # Location of the output file\ncompressionlevel = 1 # Compression level (default 0)\n\n[output.vertical] # Mapping of names between internal model components and external netCDF variables\nsatwaterdepth = \"satwaterdepth\"\nsnow = \"snow\"\ntsoil = \"tsoil\"\nustorelayerdepth = \"ustorelayerdepth\"\nsnowwater = \"snowwater\"\ncanopystorage = \"canopystorage\"\n\n[output.lateral.river]\nq = \"q_river\"\nh = \"h_river\"\n\n[output.lateral.river.reservoir]\nvolume = \"volume_reservoir\"\n\n[output.lateral.subsurface]\nssf = \"ssf\"\n\n[output.lateral.land]\nq = \"q_land\"\nh = \"h_land\"","category":"page"},{"location":"user_guide/step2_settings_file/#Scalar-data","page":"Step 2: Preparing the settings file","title":"Scalar data","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"In addition to gridded data, scalar data can also be written to a netCDF file. Below is an example that shows how to write scalar data to the file \"output_scalar_moselle.nc\". For each netCDF variable, a name (external variable name) and a parameter (internal model parameter) are required. A reducer can be specified to apply to the model output. See more details in the Output CSV section section. If a map is provided to extract data for specific locations (e.g. gauges) or areas (e.g. subcatchment), the netCDF location names are extracted from these maps. For a specific location (grid cell) a location is required. For layered model parameters and variables that have an extra layer dimension and are part of the vertical sbm concept, an internal layer index can be specified (an example is provided below). Similarly, for model parameters and variables that have an extra dimension classes and are part of the vertical FLEXTopo concept, the class name can be specified. If multiple layers or classes are desired, this can be specified in separate [[netcdf.variable]] entries. Note that the additional dimension should be specified when wflow is integrated with Delft-FEWS, for netCDF scalar data an extra dimension is not allowed by the importNetcdfActivity of the Delft-FEWS General Adapter. In the section Output CSV section, similar functionality is available for CSV. For integration with Delft-FEWS, it is recommended to write scalar data to netCDF format, as the General Adapter of Delft-FEWS can directly ingest data from netCDF files. For more information, see Run from Delft-FEWS. ","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[netcdf]\npath = \"output_scalar_moselle.nc\" # Location of the results\n\n[[netcdf.variable]] # Extract the values of lateral.river.q using the gauges map, and assign it with the name 'Q' as a variable in the netCDF file\nname = \"Q\"\nmap = \"gauges\"\nparameter = \"lateral.river.q\"\n\n[[netcdf.variable]] # Using coordinates to extract temperature\ncoordinate.x = 6.255\ncoordinate.y = 50.012\nname = \"vwc_layer2_bycoord\"\nlocation = \"vwc_bycoord\"\nparameter = \"vertical.vwc\"\nlayer = 2\n\n[[netcdf.variable]] # Using indices to extract temperature\nlocation = \"temp_byindex\"\nname = \"temp_index\"\nindex.x = 100\nindex.y = 264\nparameter = \"vertical.temperature\"","category":"page"},{"location":"user_guide/step2_settings_file/#Output-CSV-section","page":"Step 2: Preparing the settings file","title":"Output CSV section","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"Model output can also be written to a CSV file. Below is an example that writes model output to the file \"output_moselle.csv\". For each CSV column, a header and parameter (internal model parameter) are required. A reducer can be specified to apply to the model output, with the following available reducers:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"maximum\nminimum\nmean\nmedian\nsum\nfirst\nlast\nonly","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"with only as the default. To extract data for a specific location (grid cell), the index of the vector, the coordinates coordinate.x and coordinate.y, or the x and y indices of the 2D array (index.x and index.y) can be provided. Additionally, a map can be provided to extract data for certain locations (e.g. gauges) or areas (e.g. subcatchment). In this case, a single entry can lead to multiple columns in the CSV file, which will be of the form header_id, e.g. Q_20, for a gauge with integer ID 20. For layered model parameters and variables that have an extra dimension layer and are part of the vertical sbm concept an internal layer index (see also example below) should be specified. For model parameters and variables that have an extra dimension classes and are part of the vertical FLEXTopo concept, it is possible to specify the class name. If multiple layers or classes are desired, this can be specified in separate [[csv.column]] entries.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"The double brackets in [[csv.column]] follow TOML syntax, indicating that it is part of a list. You can specify as many entries as you want.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[csv]\npath = \"output_moselle.csv\"\n\n[[csv.column]]\nheader = \"Q\"\nparameter = \"lateral.river.q\"\nreducer = \"maximum\"\n\n[[csv.column]]\nheader = \"volume\"\nindex = 1\nparameter = \"lateral.river.reservoir.volume\"\n\n[[csv.column]]\ncoordinate.x = 6.255\ncoordinate.y = 50.012\nheader = \"temp_bycoord\"\nparameter = \"vertical.temperature\"\n\n[[csv.column]]\ncoordinate.x = 6.255\ncoordinate.y = 50.012\nheader = \"vwc_layer2_bycoord\"\nparameter = \"vertical.vwc\"\nlayer = 2\n\n[[csv.column]]\nheader = \"temp_byindex\"\nindex.x = 100\nindex.y = 264\nparameter = \"vertical.temperature\"\n\n[[csv.column]]\nheader = \"Q\"\nmap = \"gauges\"\nparameter = \"lateral.river.q\"\n\n[[csv.column]]\nheader = \"recharge\"\nmap = \"subcatchment\"\nparameter = \"vertical.recharge\"\nreducer = \"mean\"","category":"page"},{"location":"user_guide/step2_settings_file/#Modify-parameters","page":"Step 2: Preparing the settings file","title":"Modify parameters","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"It is possible to modify model parameters and forcing through the TOML file. Two options to modify input parameters are available:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"Set an input parameter (static) to a uniform value.\nModify an input parameter (cyclic and static) or forcing variable using a scale factor and offset.","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"For example, to set the input parameter cfmax to an uniform value of 2.5:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[input.vertical]\nwater_holding_capacity = \"WHC\"\nwaterfrac = \"WaterFrac\"\ncfmax.value = 2.5","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"For input parameters with an extra dimension (e.g. layer or classes), one uniform value can be provided or a list of values that matches the length of the additional dimension. For example, a list of values can be provided for input parameter c as follows:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[input.vertical]\nwater_holding_capacity = \"WHC\"\nwaterfrac = \"WaterFrac\"\nc.value = [10.5, 11.25, 9.5, 7.0]","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"To change the forcing variable precipitation with a scale factor of 1.5 and an offset of 0.5:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[input.vertical.precipitation]\nnetcdf.variable.name = \"P\"\nscale = 1.5\noffset = 0.5","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"For input parameters with an extra dimension, it is also possible to modify multiple indices simultaneously with different scale and offset values. In the example below, the external netCDF variable c is modified at layer index 1 and 2, with a scale factor of 2.0 and 1.5 respectively, and an offset of 0.0 for both indices:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[input.vertical.c]\nnetcdf.variable.name = \"c\"\nscale = [2.0, 1.5]\noffset = [0.0, 0.0]\nlayer = [1, 2]","category":"page"},{"location":"user_guide/step2_settings_file/#Fixed-forcing-values","page":"Step 2: Preparing the settings file","title":"Fixed forcing values","text":"","category":"section"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"It is possible to set fixed values for forcing parameters through the TOML file. For example, to set temperature to a fixed value of 10 degreeC, the complete forcing list is required:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"forcing = [\n \"vertical.precipitation\",\n \"vertical.temperature\",\n \"vertical.potential_evaporation\",\n]\n\n[input.vertical.temperature]\nvalue = 10","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"Note that the mapping to the external netCDF variable listed under the [input.vertical] section needs to be removed or commented out:","category":"page"},{"location":"user_guide/step2_settings_file/","page":"Step 2: Preparing the settings file","title":"Step 2: Preparing the settings file","text":"[input.vertical]\npotential_evaporation = \"PET\" # forcing\n# temperature = \"TEMP\" # forcing\nprecipitation = \"P\" # forcing","category":"page"},{"location":"user_guide/model-setup/#Building-a-model-from-scratch","page":"Building a model from scratch","title":"Building a model from scratch","text":"","category":"section"},{"location":"user_guide/model-setup/#Data-requirements","page":"Building a model from scratch","title":"Data requirements","text":"","category":"section"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"The actual data requirements depend on the application of the Model and the Model type. Both forcing and static data should be provided in netCDF format, with the same grid definition for forcing and static data. The only exception is storage and rating curves for lakes, that should be provided in CSV format, see also Additional settings.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"Forcing data:\nPrecipitation\nPotential evapotranspiration\nTemperature (optional, only needed for snow and glacier modelling)","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"The requirements for static data (including model parameters) depend on the Model type. The following data is required for all Model types, but not directly part of a Model component:","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"flow direction data (D8)\nriver map (location of the river)\nsub-catchment map (model domain)","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"For the flow direction (D8) data, the PCRaster ldd convention is used, see also PCRaster ldd. An approach to generate ldd data is to make use of the Python package pyflwdir:","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"to upscale existing flow direction data as the 3 arcsec MERIT Hydro data (Yamazaki et al., 2019)\nor to derive flow directions from elevation data,","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"see also Eilander et al. (2021) for more information. Pyflwdir is also used by the hydroMT Python package described in the next paragraph. Another approach to generate ldd data is to make use of PCRaster functionality, see for example lddcreate.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"Optionally, but also not directly part of a model component are gauge locations, that are used to extract gridded data from certain locations.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"The different supported model configurations are described in the section Model configurations. Wflow_sbm models have the vertical concept SBM in common and input parameters for this component are described in the SBM section of Model parameters. For wflow_sbm models there are two ways to include subsurface flow:","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"The kinematic wave approach (see section Subsurface flow routing) as part of the sbm model type. Parameters that are part of this component are described in the Lateral subsurface flow section of Model parameters. Input parameters for this component are derived from the SBM vertical concept and the land slope. One external parameter ksathorfrac is used to calculate the horizontal hydraulic conductivity at the soil surface kh_0.\nGroundwater flow (see section Groundwater flow component) as part of the sbm_gwf model type. For the unconfined aquifer the input parameters are described in the section Unconfined aquifer of Model parameters. The bottom (bottom) of the groundwater layer is derived from from the soilthickness [mm] parameter of SBM and the provided surface elevation altitude [m] as part of the static input. The area parameter is derived from the model grid. Parameters that are part of the boundary conditions of the unconfined aquifer are listed under Constant Head and Boundary conditions of the Model parameters section.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"Most hydrological model configurations make use of the kinematic wave surface routing (river flow, overland flow or both) and input data required for the river and overland flow components is described in Surface flow. There is also the option to use the local inertial model as part of the wflow_sbm models (model types sbm and sbm_gwf):","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"for river flow, see also the Local inertial river and floodplain model.\nfor 1D river flow and 2D overland flow combined, see also the Local inertial river (1D) and land (2D) model.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"Input parameters for this approach are described in River flow (local inertial), including the optional 1D floodplain schematization, and Overland flow (local inertial) of the Model parameters section.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"Reservoirs or lakes can be part of the kinematic wave or local inertial model for river flow and input parameters are described in Reservoirs and Lakes.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"The wflow_hbv model configuration consists besides the river and overland flow components of the HBV vertical concept. Input parameters for this component are described in the HBV section of Model parameters. For the river and overland flow components the kinematic wave approach is used.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"The wflow_flextopo model configuration consists besides the river and overland flow components of the FLEXTopo vertical concept. Input parameters for this component are described in the FLEXTopo section of Model parameters. For the river and overland flow components the kinematic wave approach is used.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"The wflow_sediment model configuration consists of the vertical Soil Erosion concept and the input parameters for this concept are described in the Sediment section of the Model parameters. The parameters of the lateral Sediment Flux in overland flow concept are described in the Overland flow section of the Model parameters. Parameters of this component are not directly set by data from static input. The input parameters of the lateral concept River Sediment Model are listed in River flow of the Model parameters section.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"The Model parameters section lists all the parameters per Model component and these Tables can also be used to check which parameters can be part of the output, see also Output netCDF section and Output CSV section.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"Example models can be found in the Example models section.","category":"page"},{"location":"user_guide/model-setup/#hydroMT","page":"Building a model from scratch","title":"hydroMT","text":"","category":"section"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"hydroMT is a Python package, developed by Deltares, to build and analyze hydro models. It provides a generic model api with attributes to access the model schematization, (dynamic) forcing data, results and states.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"For the following wflow_sbm model (modeltype sbm) configurations:","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"wflow_sbm + kinematic wave routing\nwflow_sbm + local inertial river and floodplain\nwflow_sbm + local inertial river (1D) and land (2D)","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"and the wflow_sediment model configuration, the wflow plugin hydroMT-wflow of hydroMT can be used to build and analyze these wflow models in an automated way.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"To learn more about the wflow plugin of this Python package, we refer to the hydroMT-wflow documentation.","category":"page"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"To inspect or modify (for example in QGIS) the netCDF static data of these wflow models it is convenient to export the maps to a raster format. This can be done as part of the hydroMT-wflow plugin, see also the following example. It is also possible to create again the netCDF static data file based on the modified raster map stack.","category":"page"},{"location":"user_guide/model-setup/#References","page":"Building a model from scratch","title":"References","text":"","category":"section"},{"location":"user_guide/model-setup/","page":"Building a model from scratch","title":"Building a model from scratch","text":"Yamazaki, D., Ikeshima, D., Sosa, J., Bates, P. D., Allen, G. H. and Pavelsky, T. M.: MERIT Hydro: A high‐resolution global hydrography map based on latest topography datasets, Water Resour. Res., 2019WR024873, doi:10.1029/2019WR024873, 2019.\nEilander, D., van Verseveld, W., Yamazaki, D., Weerts, A., Winsemius, H. C., and Ward, P. J.: A hydrography upscaling method for scale-invariant parametrization of distributed hydrological models, Hydrol. Earth Syst. Sci., 25, 5287–5313, https://doi.org/10.5194/hess-25-5287-2021, 2021.","category":"page"},{"location":"model_docs/intro/#About-the-model-documentation","page":"About the model documentation","title":"About the model documentation","text":"","category":"section"},{"location":"model_docs/intro/","page":"About the model documentation","title":"About the model documentation","text":"As opposed to the user guide, which describes the steps needed to build and apply a model in the software, this section explains the different model concepts that are available within the modelling framework of wflow. Descriptions are given regarding the model concepts with links to the original scientific papers which explain the concepts in more detail. The model parameters which influence the processes are also shown, using inline code blocks. An overview of all model parameters is also provided for easy reference, including their short names, long descriptions and their units (see parameters vertical concepts and parameters lateral concepts).","category":"page"},{"location":"model_docs/intro/#Division-between-vertical-and-lateral","page":"About the model documentation","title":"Division between vertical and lateral","text":"","category":"section"},{"location":"model_docs/intro/","page":"About the model documentation","title":"About the model documentation","text":"In the documentation we talk of vertical and lateral concepts. These are components in the model that describe the vertical movement of water in each model grid cell and the lateral movement of water across grid cells.","category":"page"},{"location":"user_guide/step3_input_data/#Step-3:-Preparing-the-input-data","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"","category":"section"},{"location":"user_guide/step3_input_data/","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"As mentioned before, the input data can be classified into two types:","category":"page"},{"location":"user_guide/step3_input_data/","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"Meteorological forcing: maps with timeseries for each model pixel, with values for precipitation, temperature, and potential evaporation. This data should be provided as a three-dimensional dataset, with the x, y and time dimensions.\nStatic maps.","category":"page"},{"location":"user_guide/step3_input_data/#Meteorological-data","page":"Step 3: Preparing the input data","title":"Meteorological data","text":"","category":"section"},{"location":"user_guide/step3_input_data/","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"Meteorological data is provided as a single netCDF file, with several variables containing the forcing data for precipitation, temperature and potential evaporation. The code snippet below shows the contents of the example file (downloaded here), and displaying the content with NCDatasets in Julia. As can be seen, each forcing variable (precip, pet and temp) consists of a three-dimensional dataset (x, y, and time), and each timestep consists of a two-dimensional map with values at each gridcell. Only values within the basin are required.","category":"page"},{"location":"user_guide/step3_input_data/","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"Group: /\n\nDimensions\n time = 366\n y = 313\n x = 291\n\nVariables\n time (366)\n Datatype: Int64\n Dimensions: time\n Attributes:\n units = days since 2000-01-02 00:00:00\n calendar = proleptic_gregorian\n\n y (313)\n Datatype: Float64\n Dimensions: y\n Attributes:\n _FillValue = NaN\n\n x (291)\n Datatype: Float64\n Dimensions: x\n Attributes:\n _FillValue = NaN\n\n spatial_ref\n Attributes:\n crs_wkt = GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]\n x_dim = x\n y_dim = y\n dim0 = time\n\n precip (291 × 313 × 366)\n Datatype: Float32\n Dimensions: x × y × time\n Attributes:\n _FillValue = NaN\n unit = mm\n precip_fn = era5\n coordinates = idx_out spatial_ref mask\n\n idx_out (291 × 313)\n Datatype: Int32\n Dimensions: x × y\n\n mask (291 × 313)\n Datatype: UInt8\n Dimensions: x × y\n\n pet (291 × 313 × 366)\n Datatype: Float32\n Dimensions: x × y × time\n Attributes:\n _FillValue = NaN\n unit = mm\n pet_fn = era5\n pet_method = debruin\n coordinates = idx_out spatial_ref mask\n\n temp (291 × 313 × 366)\n Datatype: Float32\n Dimensions: x × y × time\n Attributes:\n _FillValue = NaN\n unit = degree C.\n temp_fn = era5\n temp_correction = True\n coordinates = idx_out spatial_ref mask\n\nGlobal attributes\n unit = mm\n precip_fn = era5","category":"page"},{"location":"user_guide/step3_input_data/","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"note: Note\nWflow expects right labeling of the forcing time interval, e.g. daily precipitation at 01-02-2000 00:00:00 is the accumulated total precipitation between 01-01-2000 00:00:00 and 01-02-2000 00:00:00.","category":"page"},{"location":"user_guide/step3_input_data/#Static-data","page":"Step 3: Preparing the input data","title":"Static data","text":"","category":"section"},{"location":"user_guide/step3_input_data/#List-of-essential-static-data","page":"Step 3: Preparing the input data","title":"List of essential static data","text":"","category":"section"},{"location":"user_guide/step3_input_data/","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"The list below contains a brief overview of several essential static maps required to run wflow. These NC variables names refer to the example data of the wflow_sbm + kinematic wave model (see here). Example data for the other model configurations can be found here.","category":"page"},{"location":"user_guide/step3_input_data/","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"Description NC variable name unit\nFlow direction (1-9) wflow_ldd -\nMap indicating the river cells (0-1) wflow_river -\nThe length of the river wflow_riverlength m\nThe width of the river wflow_riverwidth m\nMask of the basin wflow_subcatch -\nLand slope Slope m m^-1\nRiver slope RiverSlope m m^-1","category":"page"},{"location":"user_guide/step3_input_data/","page":"Step 3: Preparing the input data","title":"Step 3: Preparing the input data","text":"As mentioned before, the model parameters can also be defined as spatial maps. They can be included in the same netCDF file, as long as their variable names are correctly mapped in the TOML settings file. See the section on example models on how to use this functionality.","category":"page"},{"location":"user_guide/step4_running/#run_wflow","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"","category":"section"},{"location":"user_guide/step4_running/#Using-Julia","page":"Step 4: Running a simulation","title":"Using Julia","text":"","category":"section"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"Once you installed Julia and Wflow.jl, a simulation can be started from the command line as follows:","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"julia -e 'using Wflow; Wflow.run()' path/to/config.toml","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"Furthermore, it is possible to write a Julia script to run a simulation. Example data to explore how this works can be found here.","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"using Wflow\nWflow.run(toml_path)","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"Julia can also be used to modify settings after reading the settings file. In the example below, we show how to adjust the end date of the simulation.","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"using Dates\nconfig = Wflow.Config(toml_path)\nconfig.endtime = DateTime(\"2000-01-03T00:00:00\")\nWflow.run(config)","category":"page"},{"location":"user_guide/step4_running/#cli","page":"Step 4: Running a simulation","title":"Using the command line interface","text":"","category":"section"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"If you don't need the extra features of using wflow as a library, but just want to run simulations, the command line interface makes it easier to do so. It consists of a single executable, wflow_cli that accepts a single argument, the path to a TOML configuration file.","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"Binaries of wflow_cli can be downloaded from our website download.deltares.nl, and are currently available for Windows.","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"After installing you can see three folders in the installation directory. It is only the bin/wflow_cli that is directly used. All three folders need to stay together however. The share folder contains TOML files with more information about the build.","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"bin\\wflow_cli\nlib\nshare","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"Simply running wflow_cli with no arguments will give the following message:","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"Usage: wflow_cli 'path/to/config.toml'","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"When starting a run, you will see basic run information on the screen, as well as a progress bar, that gives an estimate of how much time is needed to finish the simulation:","category":"page"},{"location":"user_guide/step4_running/","page":"Step 4: Running a simulation","title":"Step 4: Running a simulation","text":"┌ Info: Run information\n│ model_type = \"sbm\"\n│ starttime = CFTime.DateTimeStandard(2000-01-01T00:00:00)\n│ dt = 86400 seconds\n│ endtime = CFTime.DateTimeStandard(2000-12-31T00:00:00)\n└ nthreads() = 4\n\nProgress: 100%|██████████████████████████████████████████████████| Time: 0:00:27","category":"page"},{"location":"model_docs/lateral/local-inertial/#local_inertial","page":"Local inertial","title":"Local inertial","text":"","category":"section"},{"location":"model_docs/lateral/local-inertial/#River-and-floodplain-routing","page":"Local inertial","title":"River and floodplain routing","text":"","category":"section"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The local inertial approximation of shallow water flow neglects only the convective acceleration term in the Saint-Venant momentum conservation equation. The numerical solution of the local inertial approximation on a staggered grid is as follows (Bates et al., 2010):","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"Q_t+Delta t = fracQ_t - g A_t Delta t S_t(1+gDelta t n^2 Q_t (R_t^43 A_t))","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"where SIbQ_t+Delta tm^3 s^-1 is the river flow at time step t+Delta t, SIbgm s^-2 is acceleration due to gravity, SIbA_tm^2 is the cross sectional flow area at the previous time step, SIbR_tm is the hydraulic radius at the previous time step, SIbQ_tm^3 s^-1 is the river flow at the previous time step, S_t is the water surface slope at the previous time step and SIbnm^-frac13 s is the Manning's roughness coefficient.","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The momentum equation is applied to each link between two river grid cells, while the continuity equation over Delta t is applied to each river cell:","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"h^t+Delta t = h^t + Delta t fracsubtextQ^t+Delta tsrc - subtextQ^t+Delta tdstA","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"where SIbh^t+Delta tm is the water depthat time step t+Delta t, SIbh^tm is the water depth at the previous time step, SIbAm^2 is the river area and SIbsubtextQsrcm^3 s^-1 and SIbsubtextQdstm^3 s^-1 represent river flow at the upstream and downstream link of the river cell, respectively.","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The model time step Delta t for the local inertial model is estimated based on the Courant-Friedrichs-Lewy condition (Bates et al., 2010):","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"Delta t = alpha min_ileft(fracDelta x_isqrtgh_iright)","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"where sqrtgh_i is the wave celerity for river cell i , SIbDelta x_im is the river length for river cell i and alpha is a coefficient (typically between 02 and 07) to enhance the stability of the simulation.","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"In the TOML file the following properties related to the local inertial model can be provided for the sbm and sbm_gwf model types:","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"[model]\nriver_routing = \"local-inertial\" # default is \"kinematic-wave\"\ninertial_flow_alpha = 0.5 # alpha coefficient for model stability (default = 0.7)\nfroude_limit = true # default is true, limit flow to subcritical-critical according to Froude number\nh_thresh = 0.1 # water depth [m] threshold for calculating flow between cells (default = 1e-03)\nfloodplain_1d = true # include 1D floodplain schematization (default = false)","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"Two optional constant boundary conditions riverlength_bc and riverdepth_bc can be provided at a river outlet node (or multiple river outlet nodes) through the model parameter netCDF file, as follows:","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"[input.lateral.river]\nriverlength_bc = \"riverlength_bc\" # optional river length [m], default = 1e04\nriverdepth_bc = \"riverdepth_bc\" # optional river depth [m], default = 0.0","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"These boundary conditions are copied to a ghost node (downstream of the river outlet node) in the code.","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The optional 1D floodplain schematization is based on provided flood volumes as a function of flood depth (per flood depth interval) for each river cell. Wflow calculates from these flood volumes a rectangular floodplain profile for each flood depth interval. Routing is done separately for the river channel and floodplain.","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The momentum equation is most stable for low slope environments, and to keep the simulation stable for (partly) steep environments the froude_limit option is set to true by default. This setting limits flow conditions to subcritical-critical conditions based on the Froude number (le 1), similar to Coulthard et al. (2013) in the CAESAR-LISFLOOD model and Adams et al. (2017) in the Landlab v1.0 OverlandFlow component. The froude number mathrmFr on a link is calculated as follows:","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":" mathrmFr = fracusqrtgh_f","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"where sqrtgh_f is the wave celerity on a link and u is the water velocity on a link. If the water velocity from the local inertial model is causing the Froude number to be greater than 10 , the water velocity (and flow) is reduced in order to maintain a Froude number of 10.","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The downstream boundary condition basically simulates a zero water depth boundary condition at a set distance, as follows. For the downstream boundary condition (ghost point) the river width, river bed elevation and Manning's roughness coefficient are copied from the upstream river cell. The river length SIbm of the boundary cell can be set through the TOML file with riverlength_bc, and has a default value of SI10km. The water depth at the boundary cell is fixed at SI00m.","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"Simplified reservoir and lake models can be included as part of the local inertial model for river flow (1D) and river and overland flow combined (see next section). Reservoir and lake models are included as a boundary point with zero water depth for both river and overland flow. For river flow the reservoir or lake model replaces the local inertial model at the reservoir or lake location, and Q is set by the outflow from the reservoir or lake. Overland flow at a reservoir or lake location is not allowed to or from the downstream river grid cell.","category":"page"},{"location":"model_docs/lateral/local-inertial/#Overland-flow-(2D)","page":"Local inertial","title":"Overland flow (2D)","text":"","category":"section"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"For the simulation of 2D overland flow on a staggered grid the numerical scheme proposed by de Almeida et al. (2012) is adopted. The explicit solution for the estimation of water discharge between two cells in the x-direction is of the following form (following the notation of Almeida et al. (2012)):","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"Q_i-12^n+1 = fracleft theta Q_i-12^n +frac(1-theta)2(Q_(i-32)^n + \n Q_(i+12)^n)right- g h_f fracDelta tDelta x (eta^n_i - eta^n_i-1) Delta y1+gDelta t \n n^2 Q_i-12^n(h_f^73 Delta y)","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":" where subscripts i and n refer to space and time indices, respectively. Subscript i-frac12 is to the link between node i and i-1, subscript i+frac12 is the link between node i and node i+1, and subscript i-frac32 is the link between node i-1 and node i-2. SIbQm^3 s^-1 is the water discharge, SIbetam is the water surface elevation, SIbh_fm is the water depth between cells, SIbnm^-frac13 s is the Manning's roughness coefficient, SIbgm s^-2 is acceleration due to gravity, SIbDelta ts is the adaptive model time step, SIbDelta xm is the distance between two cells and SIbDelta ym is the flow width. Below the staggered grid and variables of the numerical solution in the x-direction, based on Almeida et al. (2012):","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"(Image: numerical_scheme_almeida)","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The overland flow local inertial approach is used in combination with the local inertial river routing. This is a similar to the modelling approach of Neal et al. (2012), where the hydraulic model LISFLOOD-FP was extended with a subgrid channel model. For the subgrid channel, Neal et al. (2012) make use of a D4 (four direction) scheme, while here a D8 (eight direction) scheme is used, in combination with the D4 scheme for 2D overland flow.","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"In the TOML file the following properties related to the local inertial model with 1D river routing and 2D overland flow can be provided for the sbm model type:","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"[model]\nland_routing = \"local-inertial\" # default is kinematic-wave\nriver_routing = \"local-inertial\" # default is kinematic-wave\ninertial_flow_alpha = 0.5 # alpha coefficient for model stability (default = 0.7)\nfroude_limit = true # default is true, limit flow to subcritical-critical according to Froude number\nh_thresh = 0.1 # water depth [m] threshold for calculating flow between cells (default = 1e-03)","category":"page"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The properties inertial_flow_alpha, froude_limit and h_thresh apply to 1D river routing as well as 2D overland flow. The properties inertial_flow_alpha and froude_limit, and the adaptive model time step Delta t are explained in more detail in the River and floodplain routing section of the local inertial model.","category":"page"},{"location":"model_docs/lateral/local-inertial/#Inflow","page":"Local inertial","title":"Inflow","text":"","category":"section"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"External water (supply/abstraction) inflow SIbm^3 s^-1 can be added to the local inertial model for river flow (1D) and river and overland flow combined (1D-2D), as a cyclic parameter or as part of forcing (see also Input section).","category":"page"},{"location":"model_docs/lateral/local-inertial/#Abstractions","page":"Local inertial","title":"Abstractions","text":"","category":"section"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"Abstractions from the river through the variable abstraction SIbm^3 s^-1 are possible when water demand and allocation is computed. The variable abstraction is set from the water demand and allocation module each time step. Abstractions are subtracted as part of the continuity equation of the local inertial model.","category":"page"},{"location":"model_docs/lateral/local-inertial/#Multi-Threading","page":"Local inertial","title":"Multi-Threading","text":"","category":"section"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"The local inertial model for river flow (1D) and river and overland flow combined (1D-2D) can be executed in parallel using multiple threads.","category":"page"},{"location":"model_docs/lateral/local-inertial/#References","page":"Local inertial","title":"References","text":"","category":"section"},{"location":"model_docs/lateral/local-inertial/","page":"Local inertial","title":"Local inertial","text":"Adams, J. M., Gasparini, N. M., Hobley, D. E. J., Tucker, G. E., Hutton, E. W. H., Nudurupati, S. S., and Istanbulluoglu, E., 2017, The Landlab v1.0 OverlandFlow component: a Python tool for computing shallow-water flow across watersheds, Geosci. Model Dev., 10, 1645–1663, https://doi.org/10.5194/gmd-10-1645-2017.\nde Almeida, G. A. M., P. Bates, J. E. Freer, and M. Souvignet, 2012, Improving the stability of a simple formulation of the shallow water equations for 2-D flood modeling, Water Resour. Res., 48, W05528, https://doi.org/10.1029/2011WR011570.\nBates, P. D., M. S. Horritt, and T. J. Fewtrell, 2010, A simple inertial formulation of the shallow water equations for efficient two-dimensional flood inundation modelling, J. Hydrol., 387, 33–45, https://doi.org/10.1016/j.jhydrol.2010.03.027.\nCoulthard, T. J., Neal, J. C., Bates, P. D., Ramirez, J., de Almeida, G. A. M., and Hancock, G. R., 2013, Integrating the LISFLOOD-FP 2- D hydrodynamic model with the CAESAR model: implications for modelling landscape evolution, Earth Surf. Proc. Land., 38, 1897–1906, https://doi.org/10.1002/esp.3478.\nNeal, J., G. Schumann, and P. Bates (2012), A subgrid channel model for simulating river hydraulics and floodplaininundation over large and data sparse areas, Water Resour.Res., 48, W11506, https://doi.org/10.1029/2012WR012514.","category":"page"},{"location":"user_guide/additional_options/#Additional-wflow-options","page":"Additional wflow options","title":"Additional wflow options","text":"","category":"section"},{"location":"user_guide/additional_options/#reinit","page":"Additional wflow options","title":"Starting the model with \"warm\" states","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"The state section in the TOML file provides information on the input file if the model is initialized with a warm state (path_input) and to what file the states are written at the end of the model run (path_output). Please note that the model setting reinit needs to be set to false in order to initialize the model with states from the file located at path_input. A mapping between external state names and internal model states is required. This information is specified for each model component, the vertical model and lateral model components. In the example below the vertical component represents the SBM concept, and for the lateral components there is a river (including optional reservoir, lake and floodplain components), land and subsurface domain. The internal model states are listed on the left side, and the external state names are listed on the right side. Note that path_input is only required when reinit is set to false. path_output is optional, an output state file is only written when it is defined. If neither is set, the entire state section can be left out.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"[model]\nreinit = false # cold (reinit = true) or warm state (reinit = false), default is true\n\n[state]\npath_input = \"data/instates-moselle.nc\" # Location of the file with the input states\npath_output = \"data/outstates-moselle.nc\" # Output location of the states after the model run\n\n[state.vertical]\nsatwaterdepth = \"satwaterdepth\"\nsnow = \"snow\"\ntsoil = \"tsoil\"\nustorelayerdepth = \"ustorelayerdepth\"\ncanopystorage = \"canopystorage\"\nsnowwater = \"snowwater\"\nglacierstore =\"glacierstore\"\n\n[state.lateral.river]\nq = \"q_river\"\nh = \"h_river\"\nh_av = \"h_av_river\"\n\n[state.lateral.river.floodplain] \nq = \"q_floodplain\"\nh = \"h_floodplain\"\n\n[state.lateral.river.reservoir]\nvolume = \"volume_reservoir\"\n\n[state.lateral.river.lake]\nwaterlevel = \"waterlevel_lake\"\n\n[state.lateral.subsurface]\nssf = \"ssf\"\n\n[state.lateral.land]\nq = \"q_land\"\nh = \"h_land\"\nh_av = \"h_av_land\"","category":"page"},{"location":"user_guide/additional_options/#Enabling-snow-and-glacier-processes","page":"Additional wflow options","title":"Enabling snow and glacier processes","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"[model]\nsnow = true\nmasswasting = true\nglacier = true\n\n[input.vertical]\ntt = \"TT\"\ntti = \"TTI\"\nttm = \"TTM\"\nwater_holding_capacity = \"WHC\"\nglacierstore = \"wflow_glacierstore\"\nglacierfrac = \"wflow_glacierfrac\"\ng_cfmax = \"G_Cfmax\"\ng_tt = \"G_TT\"\ng_sifrac = \"G_SIfrac\"","category":"page"},{"location":"user_guide/additional_options/#Enabling-reservoirs","page":"Additional wflow options","title":"Enabling reservoirs","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"[model]\nreservoirs = true\n\n[input.lateral.river.reservoir]\narea = \"ResSimpleArea\"\nareas = \"wflow_reservoirareas\"\ndemand = \"ResDemand\"\nlocs = \"wflow_reservoirlocs\"\nmaxrelease = \"ResMaxRelease\"\nmaxvolume = \"ResMaxVolume\"\ntargetfullfrac = \"ResTargetFullFrac\"\ntargetminfrac = \"ResTargetMinFrac\"\n\n[state.lateral.river.reservoir]\nvolume = \"volume_reservoir\"","category":"page"},{"location":"user_guide/additional_options/#Enabling-lakes","page":"Additional wflow options","title":"Enabling lakes","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"[model]\nlakes = true\n\n[input.lateral.river.lake]\narea = \"lake_area\"\nareas = \"wflow_lakeareas\"\nb = \"lake_b\"\ne = \"lake_e\"\nlocs = \"wflow_lakelocs\"\noutflowfunc = \"lake_outflowfunc\"\nstorfunc = \"lake_storfunc\"\nthreshold = \"lake_threshold\"\nwaterlevel = \"lake_waterlevel\"\n\n[state.lateral.river.lake]\nwaterlevel = \"waterlevel_lake\"","category":"page"},{"location":"user_guide/additional_options/#Enabling-Floodplain-routing","page":"Additional wflow options","title":"Enabling Floodplain routing","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"As part of the local inertial model for river flow.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"[model]\nfloodplain_1d = true\n\n[input.lateral.river.floodplain]\nvolume = \"floodplain_volume\"\nn = \"floodplain_n\"\n\n[state.lateral.river.floodplain] \nq = \"q_floodplain\"\nh = \"h_floodplain\"","category":"page"},{"location":"user_guide/additional_options/#Enabling-water-demand-and-allocation","page":"Additional wflow options","title":"Enabling water demand and allocation","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"The model types sbm and sbm_gwf support water demand and allocation computations, in combination with the kinematic wave and local inertial runoff routing scheme for river and overland flow.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"# example of water demand and allocation input parameters as cyclic data\n[input]\ncyclic = [\"vertical.domestic.demand_gross\", \"vertical.domestic.demand_net\", \n\"vertical.industry.demand_gross\", \"vertical.industry.demand_net\", \n\"vertical.livestock.demand_gross\", \"vertical.livestock.demand_net\", \n\"vertical.paddy.irrigation_trigger\", \"vertical.nonpaddy.irrigation_trigger\",]\n\n[model.water_demand]\ndomestic = true # optional, default is \"false\"\nindustry = true # optional, default is \"false\"\nlivestock = true # optional, default is \"false\"\npaddy = true # optional, default is \"false\"\nnonpaddy = true # optional, default is \"false\"\n\n[input.vertical.allocation]\nareas = \"allocation_areas\"\nfrac_sw_used = \"SurfaceWaterFrac\"\n\n[input.vertical.domestic]\ndemand_gross = \"dom_gross\"\ndemand_net = \"dom_net\"\n\n[input.vertical.industry]\ndemand_gross = \"ind_gross\"\ndemand_net = \"ind_net\"\n\n[input.vertical.livestock]\ndemand_gross = \"lsk_gross\"\ndemand_net = \"lsk_net\"\n\n[input.vertical.paddy]\nirrigation_areas = \"paddy_irrigation_areas\"\nirrigation_trigger = \"irrigation_trigger\"\n\n[input.vertical.nonpaddy]\nirrigation_areas = \"nonpaddy_irrigation_areas\"\nirrigation_trigger = \"irrigation_trigger\"\n\n# required if paddy is set to \"true\"\n[state.vertical.paddy]\nh = \"h_paddy\"","category":"page"},{"location":"user_guide/additional_options/#multi_threading","page":"Additional wflow options","title":"Using multithreading","text":"","category":"section"},{"location":"user_guide/additional_options/#Using-wflow-in-Julia","page":"Additional wflow options","title":"Using wflow in Julia","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"Wflow supports multi-threading execution of the wflow_sbm model that uses the kinematic wave approach for river, overland and lateral subsurface flow. Both the vertical SBM concept and the kinematic wave components of this model can run on multiple threads. The optional local inertial model for river flow and the optional local inertial model for river (1D) and land (2D), both part of wflow_sbm, can also run on multiple threads. The threading functionality for the kinematic wave may also be useful for models that make (partly) use of this routing approach as the wflow_hbv model and the wflow_sbm model SBM + Groundwater flow. The multi-threading functionality in wflow is considered experimental, see also the following issue, where an error was not thrown running code multi-threaded. Because of this we advise to start with running a wflow model single-threaded (for example during the testing phase of setting up an new wflow model).","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"For information on how to start Julia with multiple threads we refer to How to start Julia with multiple threads.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"Additionally, when running Julia + wflow via the command line (note that this is different from the wflow_cli), it is possible to define the number of threads via the -t flag. An example where we start Julia with three threads:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"julia -t 3 -e 'using Wflow; Wflow.run()' path/to/config.toml","category":"page"},{"location":"user_guide/additional_options/#cli_multi_threading","page":"Additional wflow options","title":"Using the command line interface","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"As explained above, we need to start julia with multiple threads to make use of this speedup. For wflow_cli, the only way to do this is by setting the JULIA_NUM_THREADS environment variable, as explained in these julia docs.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"When a model run starts, among the run information the number of threads that are used is printed, so nthreads() = 4 means 4 threads are used, because JULIA_NUM_THREADS has been set to 4.","category":"page"},{"location":"user_guide/additional_options/#Using-the-Basic-Model-Interface","page":"Additional wflow options","title":"Using the Basic Model Interface","text":"","category":"section"},{"location":"user_guide/additional_options/#Introduction","page":"Additional wflow options","title":"Introduction","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"The Community Surface Dynamics Modeling System (CSMDS) has developed the Basic Model Interface (BMI). BMI consists of a set of standard control and query functions that can be added by a developer to the model code and makes a model both easier to learn and easier to couple with other software elements.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"For more information see also: http://csdms.colorado.edu/wiki/BMI_Description","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"CSDMS provides specifications for the languages C, C++, Fortran and Python. Wflow, written in the Julia programming language, makes use of the following Julia specification, based on BMI 2.0 version.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"For the BMI implementation of wflow all grids are defined as unstructured grids, including the special cases scalar and points. While the input (forcing and model parameters) is structured (uniform rectilinear), internally wflow works with one dimensional arrays based on the active grid cells of the 2D model domain.","category":"page"},{"location":"user_guide/additional_options/#Configuration","page":"Additional wflow options","title":"Configuration","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"The variables that wflow can exchange through BMI are based on the different model components and these components should be listed under the API section of the TOML configuration file of the model type. Below an example of this API section, that lists the vertical component and different lateral components:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"[API]\ncomponents = [\n \"vertical\",\n \"lateral.subsurface\",\n \"lateral.land\",\n \"lateral.river\",\n \"lateral.river.reservoir\"\n]","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"See also:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"Wflow.BMI.initialize\nWflow.BMI.get_input_var_names","category":"page"},{"location":"user_guide/additional_options/#BasicModelInterface.initialize","page":"Additional wflow options","title":"BasicModelInterface.initialize","text":"BMI.initialize(::Type{<:Wflow.Model}, config_file)\n\nInitialize the model. Reads the input settings and data as defined in the Config object generated from the configuration file config_file. Will return a Model that is ready to run.\n\n\n\n\n\n","category":"function"},{"location":"user_guide/additional_options/#BasicModelInterface.get_input_var_names","page":"Additional wflow options","title":"BasicModelInterface.get_input_var_names","text":"BMI.get_input_var_names(model::Model)\n\nReturns model input variables, based on the API section in the model configuration file. This API sections contains a list of Model components for which variables can be exchanged.\n\n\n\n\n\n","category":"function"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"Variables with a third dimension, for example layer as part of the vertical SBM concept, are exposed as two-dimensional grids through the wflow BMI implementation. For these variables the index of this third dimension is required, by adding [k] to the variable name (k refers to the index of the third dimension). For example, the variable vertical.vwc[1] refers to the first soil layer of the vertical SBM concept.","category":"page"},{"location":"user_guide/additional_options/#Couple-to-a-groundwater-model","page":"Additional wflow options","title":"Couple to a groundwater model","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"For the coupling of wflow_sbm (SBM + kinematic wave) with a groundwater model (e.g. MODFLOW) it is possible to run:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"wflow_sbm in parts from the BMI, and\nto switch off the lateral subsurface flow component of wflow_sbm.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"The lateral subsurface component of wflow_sbm is not initialized by wflow when the [input.lateral.subsurface] part of the TOML file is not included. Then from the BMI it is possible to run first the recharge part of SBM:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"model = BMI.update(model, run=\"sbm_until_recharge\")","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"and to exchange recharge and for example river waterlevels to the groundwater model. After the groundwater model update, and the exchange of groundwater head and for example drain and river flux to wflow_sbm, the SBM part that mainly determines exfiltration of water from the unsaturated store, and the kinematic wave for river - and overland flow can be run as follows:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"model = BMI.update(model, run=\"sbm_after_subsurfaceflow\")","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"See also:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"Wflow.BMI.update","category":"page"},{"location":"user_guide/additional_options/#BasicModelInterface.update","page":"Additional wflow options","title":"BasicModelInterface.update","text":"BMI.update(model::Model; run = nothing)\n\nUpdate the model for a single timestep.\n\nArguments\n\nrun = nothing: to update a model partially.\n\n\n\n\n\n","category":"function"},{"location":"user_guide/additional_options/#run_fews","page":"Additional wflow options","title":"Run from Delft-FEWS","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"Wflow integrates easily as part of an operational system by linking to the Delft-FEWS platform. Delft-FEWS integrates data and models, and is for example used in many active flood forecasting systems around the world.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"This can be done without a model adapter that provides the interface between Delft-FEWS and an external model (or module). This is possible because time information in the TOML configuration file is optional and Delft-FEWS can import and export netCDF files. When time information is left out from the TOML configuration file, the starttime, endtime and timestepsecs (timestep) of the run is extracted from the netCDF forcing file by wflow.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"To indicate that a wflow model runs from Delft-FEWS, the following setting needs to be specified in the main section of the TOML configuration file:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"fews_run = true # optional, default value is false","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"This ensures that wflow offsets the time handling, to meet the expectations of Delft-FEWS.","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"It also uses a different format for the log file such that each log message takes up only one line. That meets the General Adapter logFile expectations, which then can get parsed with these Delft-FEWS log parsing settings:","category":"page"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"\n log.txt\n * [Error] *\n * [Warn] *\n * [Info] *\n * [Debug] *\n","category":"page"},{"location":"user_guide/additional_options/#Run-wflow-as-a-ZMQ-Server","page":"Additional wflow options","title":"Run wflow as a ZMQ Server","text":"","category":"section"},{"location":"user_guide/additional_options/","page":"Additional wflow options","title":"Additional wflow options","text":"It is possible to run wflow as a ZMQ Server, for example for the coupling to the OpenDA software for data-assimilation. The code for the wflow ZMQ Server is not part of the Wflow.jl package, and is located here.","category":"page"},{"location":"model_docs/vertical/sediment/#vert_sediment","page":"Sediment","title":"Sediment","text":"","category":"section"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Over the land, soil erosion, also called soil loss, is closely linked to the water cycle. The main processes governing sediment generation are splash erosion from rain droplets, and sheet and rill erosion from the shear stress caused by overland flow. The intensity of soil erosion by rain or flow depends on the land and soil characteristics such as slope, land use or soil type. Once soil is eroded, the detached particles can be transported downslope by overland flow. Along the transport pathways, soil particles can also be deposited due to a low flow velocity, a change of topography in depressions, footslopes or valley bottoms, and/or can be filtered and stopped by a change in vegetation such as field boundaries.","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"The inland part of the sediment gathers these different processes, separated in a vertical structure for the soil loss and lateral structure for the transport in overland flow.","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Overview of the different processes for a land cell in wflow_sediment.","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"(Image: sediment_inland)","category":"page"},{"location":"model_docs/vertical/sediment/#Soil-Erosion","page":"Sediment","title":"Soil Erosion","text":"","category":"section"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"The first process to consider in sediment dynamics is the generation of sediments by land erosion. The main processes behind soil loss are rainfall erosion and overland flow erosion. In order to model such processes at a fine time and space scale, physics-based models such as ANSWERS and EUROSEM were chosen here.","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"The choice of rainfall erosion method is set up in the model section of the TOML:","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"[model]\nrainerosmethod = \"answers\" # Rainfall erosion equation: [\"answers\", \"eurosem\"]","category":"page"},{"location":"model_docs/vertical/sediment/#Rainfall-erosion","page":"Sediment","title":"Rainfall erosion","text":"","category":"section"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"In wflow_sediment, rainfall erosion can both be modelled using EUROSEM or ANSWERS equation. The main difference between the models is that EUROSEM uses a more physics-based approach based on the kinetic energy of the rain drops impacting the soil (Morgan et al, 1998), while ANSWERS is more empirical and uses parameters from the USLE model (Beasley et al, 1991).","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"In EUROSEM, rainfall erosion is modelled according to rainfall intensity and its kinetic energy when it reaches the soil according to equations developed by Brandt (1990). As the intensity of the rain kinetic energy depends on the length of the fall, rainfall intercepted by vegetation will then be reduced compared to direct throughfall. The kinetic energy of direct throughfall is estimated by (Morgan et al, 1998):","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":" subtextmathrmKEdirect = 895 + 844log_10(R_i)","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"where SIbsubtextmathrmKEdirectJ m^-2 mm^-1 is the kinetic energy of direct throughfall and SIbR_imm h^-1 is rainfall intensity. If the rainfall is intercepted by vegetation and falls as leaf drainage, its kinetic energy is then reduced according to (Brandt, 1990):","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":" subtextmathrmKEleaf = 158sqrtH_p - 587","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"where SIbsubtextmathrmKEleafJ m^-2 mm^-1 is kinetic energy of leaf drainage and SIbH_pm is the effective canopy height (half of plant height). Canopy height can be derived from the global map from Simard & al. (2011) or by user input depending on the land use.","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Kinetic energies from both direct throughfall and leaf drainage are then multiplied by the respective depths of direct throughfall and leaf drainage (mm) and added to get the total rainfall kinetic energy mathrmKE. The soil detached by rainfall SIbD_Rg m^-2 is then:","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":" D_R = kmathrmKEe^-varphi h","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"where SIbkg J^-1 is an index of the detachability of the soil, SIbmathrmKEJ m^-2 is the total rainfall kinetic energy, SIbhm is the surface runoff depth on the soil and varphi is an exponent varying between 09 and 31 used to reduce rainfall impact if the soil is already covered by water. As a simplification, Torri (1987) has shown that a value of 20 for varphi is representative enough for a wide range of soil conditions. The detachability of the soil k depends on the soil texture (proportion of clay, silt and sand content) and corresponding values are defined in EUROSEM user guide (Morgan et al, 1998). As a simplification, in wflow_sediment, the mean value of the detachability shown in the table below are used. Soil texture can for example be derived from the topsoil clay and silt content from SoilGrids (Hengl et al, 2017).","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Table: Mean detachability of soil depending on its texture (Morgan et al, 1998).","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Texture (USDA system) Mean detachability SIbkg J^-1\nClay 2.0\nClay Loam 1.7\nSilt 1.2\nSilt Loam 1.5\nLoam 2.0\nSandy Loam 2.6\nLoamy Sand 3.0\nFine Sand 3.5\nSand 1.9","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Rainfall erosion is handled differently in ANSWERS. There, the impacts of vegetation and soil properties are handled through the USLE coefficients in the equation (Beasley et al, 1991):","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":" D_R = 0108 subtextCUSLE subtextKUSLE A_i R_i^2","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"where SIbD_Rkg min^-1 is the soil detachment by rainfall, subtextCUSLE is the soil cover-management factor from the USLE equation, subtextKUSLE is the soil erodibility factor from the USLE equation, SIbA_im^2 is the area of the cell and SIbR_immmin^-1 is the rainfall intensity. There are several methods available to estimate the C and K factors from the USLE. They can come from user input maps, for example maps resulting from Panagos & al.'s recent studies for Europe (Panagos et al, 2015) (Ballabio et al, 2016). To get an estimate of the C factor globally, the other method is to estimate C values for the different land use type in from global land cover maps (e.g. GlobCover). An example is given for the global land cover map GlobCover, summed up in the table below, the values come from a literature study including Panagos et al.'s review (2015), Gericke & al. (2015), Mansoor & al. (2013), Chadli et al. (2016), de Vente et al. (2009), Borrelli et al. (2014), Yang et al. (2003) and Bosco et al. (2015).","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"The other methods to estimate the USLE K factor are to use either topsoil composition or topsoil geometric mean diameter. K estimation from topsoil composition is estimated with the equation developed in the EPIC model (Williams et al, 1983):","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":" subtextKUSLE = left 02 + 03expleft(-00256mathrmSANfrac(1-mathrmSIL)100right) right\n left(fracmathrmSILmathrmCLA+mathrmSILright)^03 \n left(1-frac025mathrmOCmathrmOC+e^372-295mathrmOCright)left(1-frac075mathrmSNmathrmSN+e^-551+229mathrmSNright)","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"where SIbmathrmCLA, SIbmathrmSIL, SIbmathrmSAN are respectively the clay, silt and sand fractions of the topsoil, SIbOC is the topsoil organic carbon content and mathrmSN = 1-mathrmSAN100. These soil parameters can be derived for example from the SoilGrids dataset. The K factor can also be estimated from the soil mean geometric diameter using the formulation from the RUSLE guide by Renard & al. (1997):","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":" subtextKUSLE = 00034 + 00405expleft(-dfrac12left(dfraclog_10(D_g)+165907101right)^2right)","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"where D_g is the soil geometric mean diameter (mm) estimated from topsoil clay, silt, sand fraction.","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Table: Estimation of USLE C factor per Globcover land use type","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"GlobCover Value Globcover label subtextCUSLE\n11 Post-flooding or irrigated croplands (or aquatic) 0.2\n14 Rainfed croplands 0.35\n20 Mosaic cropland (50-70%) vegetation (grassland/shrubland/forest) (20-50%) 0.27\n30 Mosaic vegetation (grassland/shrubland/forest) (50-70%) / cropland (20-50%) 0.25\n40 Closed to open (>15%) broadleaved evergreen or semi-deciduous forest (>5m) 0.0065\n50 Closed (>40%) broadleaved deciduous forest (>5m) 0.001\n60 Open (15-40%) broadleaved deciduous forest/woodland (>5m) 0.01\n70 Closed (>40%) needleleaved evergreen forest (>5m) 0.001\n90 Open (15-40%) needleleaved deciduous or evergreen forest (>5m) 0.01\n100 Closed to open (>15%) mixed broadleaved and needleleaved forest (>5m) 0.02\n110 Mosaic forest or shrubland (50-70%) / grassland (20-50%) 0.015\n120 Mosaic grassland (50-70%) / forest or shrubland (20-50%) 0.03\n130 Closed to open (>15%) (broadleaved or needleleaved, evergreen or deciduous) shrubland (<5m) 0.035\n140 Closed to open (>15%) herbaceous vegetation (grassland, savannas or lichens/mosses) 0.05\n150 Sparse (<15%) vegetation 0.35\n160 Closed to open (>15%) broadleaved forest regularly flooded (semi-permanently or temporarily) - Fresh or brackish water 0.001\n170 Closed (>40%) broadleaved forest or shrubland permanently flooded - Saline or brackish water 0.0005\n180 Closed to open (>15%) grassland or woody vegetation on regularly flooded or waterlogged soil - Fresh, brackish or saline water 0.04\n190 Artificial surfaces and associated areas (Urban areas >50%) 0.0\n200 Bare areas 0.0\n210 Water bodies 0.0\n220 Permanent snow and ice 0.0\n230 No data (burnt areas, clouds,…) 0.0","category":"page"},{"location":"model_docs/vertical/sediment/#Overland-flow-erosion","page":"Sediment","title":"Overland flow erosion","text":"","category":"section"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Overland flow (or surface runoff) erosion is induced by the strength of the shear stress of the surface water on the soil. As in rainfall erosion, the effect of the flow shear stress can be reduced by the soil vegetation or by the soil properties. In wflow_sediment, soil detachment by overland flow is modelled as in ANSWERS with (Beasley et al, 1991):","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":" D_G = 090 subtextCUSLE subtextKUSLE A_i S q","category":"page"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"where SIbD_Fkgmin^-1 is soil detachment by flow, subtextCUSLE and subtextKUSLE are the USLE cover and soil erodibility factors, SIbA_im^2 is the cell area, S is the slope gradient and SIbqm^2 min^-1 is the overland flow rate per unit width. The USLE C and K factors can be estimated with the same methods as for rainfall erosion and here the slope gradient is obtained from the sinus rather than the tangent of the slope angle.","category":"page"},{"location":"model_docs/vertical/sediment/#Delivery-to-the-river-system","page":"Sediment","title":"Delivery to the river system","text":"","category":"section"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"Once soil is detached, it can be transported by overland flow and reach the river system. This process is described in Sediment Flux in overland flow.","category":"page"},{"location":"model_docs/vertical/sediment/#References","page":"Sediment","title":"References","text":"","category":"section"},{"location":"model_docs/vertical/sediment/","page":"Sediment","title":"Sediment","text":"D.B Beasley and L.F Huggins. ANSWERS - Users Manual. Technical report, EPA, 1991.\nP. Borrelli, M. Märker, P. Panagos, and B. Schütt. Modeling soil erosion and river sediment yield for an intermountain drainage basin of the Central Apennines, Italy. Catena, 114:45-58, 2014. 10.1016/j.catena.2013.10.007\nC. Bosco, D. De Rigo, O. Dewitte, J. Poesen, and P. Panagos. Modelling soil erosion at European scale: Towards harmonization and reproducibility. Natural Hazards and Earth System Sciences, 15(2):225-245, 2015. 10.5194/nhess-15-225-2015\nC.J Brandt. Simulation of the size distribution and erosivity of raindrops and throughfall drops. Earth Surface Processes and Landforms, 15(8):687-698, dec 1990.\nK. Chadli. Estimation of soil loss using RUSLE model for Sebou watershed (Morocco). Modeling Earth Systems and Environment, 2(2):51, 2016. 10.1007/s40808-016-0105-y\nG R Foster. Modeling the erosion process. Hydrologic modeling of small watersheds, pages 295-380, 1982.\nA. Gericke. Soil loss estimation and empirical relationships for sediment delivery ratios of European river catchments. International Journal of River Basin Management, 2015. 10.1080/15715124.2014.1003302\nL.D.K. Mansoor, M.D. Matlock, E.C. Cummings, and L.L. Nalley. Quantifying and mapping multiple ecosystem services change in West Africa. Agriculture, Ecosystems and Environment, 165:6-18, 2013. 10.1016/j.agee.2012.12.001\nQ Morgan, J.N Smith, R.E Govers, G Poesen, J.W.A Auerswald, K Chisci, G Torri, D Styczen, and M E Folly. The European soil erosion model (EUROSEM): documentation and user guide. Technical report, 1998.\nS.L Neitsch, J.G Arnold, J.R Kiniry, and J.R Williams. SWAT Theoretical Documentation Version 2009. Texas Water Resources Institute, pages 1-647, 2011. 10.1016/j.scitotenv.2015.11.063\nP. Panagos, P. Borrelli, K. Meusburger, C. Alewell, E. Lugato, and L. Montanarella. Estimating the soil erosion cover-management factor at the European scale. Land Use Policy, 48:38-50, 2015. 10.1016/j.landusepol.2015.05.021\nK Renard, Gr Foster, Ga Weesies, Dk McCool, and Dc Yoder. Predicting soil erosion by water: a guide to conservation planning with the Revised Universal Soil Loss Equation (RUSLE). Washington, 1997.\nD. Torri, M. Sfalanga, and M. Del Sette. Splash detachment: Runoff depth and soil cohesion. Catena, 14(1-3):149-155, 1987. 10.1016/S0341-8162(87)80013-9\nJ. de Vente, J. Poesen, G. Govers, and C. Boix-Fayos. The implications of data selection for regional erosion and sediment yield modelling. Earth Surface Processes and Landforms, 34(15):1994-2007, 2009. 10.1002/esp.1884\nG. Verstraeten and J. Poesen. Estimating trap efficiency of small reservoirs and ponds: methods and implications for the assessment of sediment yield. Progress in Physical Geography, 24(2):219-251, 2000. 10.1177/030913330002400204\nO. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, and J. Poesen. Adapting SWAT hillslope erosion model to predict sediment concentrations and yields in large Basins. Science of the Total Environment, 538:855-875, 2015. 10.1016/j.scitotenv.2015.08.095\nJ.R. Williams, K.G. Renard, and P.T. Dyke. EPIC A new method for assessing erosion's effect on soil productivity. Journal of Soil and Water Conservation, 38(5):381-383, 1983.\nD. Yang, S. Kanae, T. Oki, T. Koike, and K. Musiake. Global potential soil erosion with reference to land use and climate changes. Hydrological Processes, 17(14):2913-2928, 2003. 10.1002/hyp.1441","category":"page"},{"location":"","page":"About wflow","title":"About wflow","text":"CurrentModule = Wflow","category":"page"},{"location":"#About-wflow","page":"About wflow","title":"About wflow","text":"","category":"section"},{"location":"","page":"About wflow","title":"About wflow","text":"Wflow is Deltares' solution for modelling hydrological processes, allowing users to account for precipitation, interception, snow accumulation and melt, evapotranspiration, soil water, surface water, groundwater recharge, and water demand and allocation in a fully distributed environment. Successfully applied worldwide for analyzing flood hazards, drought, climate change impacts and land use changes, wflow is growing to be a leader in hydrology solutions. Wflow is conceived as a framework, within which multiple distributed model concepts are available, which maximizes the use of open earth observation data, making it the hydrological model of choice for data scarce environments. Based on gridded topography, soil, land use and climate data, wflow calculates all hydrological fluxes at any given grid cell in the model at a given time step.","category":"page"},{"location":"","page":"About wflow","title":"About wflow","text":"Wflow was born out of the creation of Deltares in 2008, when a strategic review identified the need for a distributed hydrological model to allow the simulation of flows at the catchment scale. With the intention being to encourage greater scientific collaboration. For this reason:","category":"page"},{"location":"","page":"About wflow","title":"About wflow","text":"Wflow is free and open source software.\nWflow is easily coupled with other models and software applications.\nContribution to the wflow code development is encouraged.","category":"page"},{"location":"","page":"About wflow","title":"About wflow","text":"From 2021 the wflow code is distributed under the MIT License. Wflow is also available as a compiled executable under the Deltares terms and conditions. The wflow computational engine is built in the Julia language, a high-performance computing language. Wflow does not include a graphical user interface and is designed for maximum user flexibility. Prior to 2021, wflow was developed in Python on top of the PCRaster Python extension. The Python version is still available, but not actively developed.","category":"page"},{"location":"user_guide/step5_output/#Step-5:-Analyzing-the-model-output","page":"Step 5: Analyzing the model output","title":"Step 5: Analyzing the model output","text":"","category":"section"},{"location":"user_guide/step5_output/","page":"Step 5: Analyzing the model output","title":"Step 5: Analyzing the model output","text":"After running the model example from the previous step 4, the model results can be found in data/output_moselle_simple.csv.","category":"page"},{"location":"user_guide/step5_output/","page":"Step 5: Analyzing the model output","title":"Step 5: Analyzing the model output","text":"If required, it is also possible to output netCDF files as output, by modifying the TOML file. An example is shown below:","category":"page"},{"location":"user_guide/step5_output/","page":"Step 5: Analyzing the model output","title":"Step 5: Analyzing the model output","text":"# Spatial output\n[output]\npath = \"data/output.nc\"\n\n[output.lateral.river]\nq_av = \"q_river\"\n\n[output.lateral.land]\nq = \"q_land\"\nh = \"h_land\"\n\n# Scalar output (mapped to the specified map)\n[netcdf]\npath = \"data/output_scalar.nc\"\n\n[[netcdf.variable]]\nname = \"Q\"\nmap = \"gauges\"\nparameter = \"lateral.river.q_av\"\n\n[[netcdf.variable]]\nname = \"prec\"\nmap = \"subcatchment\"\nparameter = \"vertical.precipitation\"\nreducer = \"mean\"","category":"page"},{"location":"user_guide/step5_output/","page":"Step 5: Analyzing the model output","title":"Step 5: Analyzing the model output","text":"Using your own preferred programming language, the model output files can be easily read and visualized.","category":"page"},{"location":"model_docs/lateral/gwf/#lateral_gwf","page":"Groundwater flow","title":"Groundwater flow","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Single layer groundwater flow requires the four following components, and each is described in more detail below:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"aquifer\nconnectivity\nconstanthead\nboundaries","category":"page"},{"location":"model_docs/lateral/gwf/#Aquifer-types","page":"Groundwater flow","title":"Aquifer types","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Groundwater flow can occur either in a confined or unconfined aquifer. Confined aquifers are overlain by a poorly permeable confining layer (e.g. clay). No air can get in to fill the pore space so that the aquifer always remains fully saturated. For a confined aquifer, water will always flow along the complete height SIbHm over the aquifer and transmissivity SIbkHm^2 d^-1 is a constant (SIbkm d^-1 is the horizontal hydraulic conductivity). Specific storage is the amount of water an aquifer releases per unit change in hydraulic head, per unit volume of aquifer, as the aquifer and the groundwater itself is compressed. Its value is much smaller than specific yield, between 10^-5 (stiff) and 10^-2 (weak).","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The upper boundary of an unconfined aquifer is the water table (the phreatic surface). Specific yield (or drainable porosity) represents the volumetric fraction the aquifer will yield when all water drains and the pore volume is filled by air instead. Specific yield will vary roughly between 005 (clay) and 045 (peat) (Johnson, 1967).","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Groundwater flow is solved forward in time and central in space. The vertically averaged governing equation for an inhomogeneous and isotropic aquifer in one dimension can be written as:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":" S fracpartial phipartial t = fracpartialpartial x left(kH fracphidelta xright) + Q","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"where SIbSm m^-1 is storativity (or specific yield), SIbphim is hydraulic head, t is time, SIbkm t^-1 is horizontal hydraulic conductivity, SIbHm is the (saturated) aquifer height: groundwater level - aquifer bottom elevation and SIbQm t^-1 represents fluxes from boundary conditions (e.g. recharge or abstraction), see also Aquifer boundary conditions.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The simplest finite difference formulation is forward in time, central in space, and can be written as:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":" S_i fracphi_i^t+1 - phi_i^tDelta t = -C_i-1 (phi_i-1 - phi_i) - C_i (phi_i+1 - phi_i) + Q_i","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"where i is the cell index, t is time, Delta t is the step size, C_i-1 is the the intercell conductance between cell i-1 and i and C_i is the intercell conductance between cell i and i+1. The connection data between cells is stored as part of the Connectivity struct, see also Connectivity for more information.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Conductance C is defined as:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":" C = frackH wl","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"where SIbwm is the width of the cell to cell connection, and SIblm is the length of the cell to cell connection. k and H may both vary in space; intercell conductance is therefore an average using the properties of two cells. For the calculation of the intercell conductance C the harmonic mean is used (see also Goode and Appel, 1992), here between cell index i and cell index i+1, in the x direction:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":" C_i = w frack_iH_icdot k_i+1H_i+1k_iH_i cdot l_i+1 + k_i+1H_i+1 cdot l_i","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"where SIbHm is the aquifer top - aquifer bottom, and k, l_i is the length in cell i (05 Delta x_i), l_i+1 is the length in cell i+1 (05 Delta x_i+1) and w as previously defined. For an unconfined aquifer the intercell conductance is scaled by using the \"upstream saturated fraction\" as the MODFLOW documentation calls it. In this approach, the saturated thickness of a cell-to-cell is approximated using the cell with the highest head. This results in a consistent overestimation of the saturated thickness, but it avoids complexities related with cell drying and rewetting, such as having to define a \"wetting threshold\" or a \"wetting factor\". See also the documentation for MODFLOW-NWT (Niswonger et al., 2011) or MODFLOW6 (Langevin et al., 2017) for more background information. For more background on drying and rewetting, see for example McDonald et al. (1991).","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"For the finite difference formulation, there is only one unknown, phi_i^t+1. Reshuffling terms:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"phi_i^t+1 = phi_i^t + (C_i-1 (phi_i - phi_i-1) + C_i (phi_i+1 - phi_i) + Q_i) fracΔtS_i","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"This can be generalized to two dimensions, for both regular and irregular cell connectivity. Finally, a stable time step size can be computed given the forward-in-time, central in space scheme, based on the following criterion from Chu and Willis (1984):","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"fracDelta t k HDelta x Delta y S le frac14","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"where SIbDelta td is the stable time step size, SIbDelta xm is the cell length in the x direction and SIbDelta ym is the cell length in the y direction, SIbkm^2 d^-1 is the horizontal hydraulic conductivity and SIbHm is the saturated thickness of the aquifer. For each cell fracDelta x Delta y Sk H is calculated, the minimum of these values is determined, and multiplied by frac14, to get the stable time step size.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"For more details about the finite difference formulation and the stable time step size criterion we refer to the paper of Chu and Willis (1984).","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Boundary conditions can be classified into three categories:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"specified head (Dirichlet)\nspecified flux (Neumann)\nhead-dependent flux (Robin)","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Neumann and Robin conditions are implemented by adding to or subtracting from a net (lumped) cell flux. Dirichlet conditions are special cased, since they cannot (easily) be implemented via the flux, but the head is set directly instead.","category":"page"},{"location":"model_docs/lateral/gwf/#Connectivity","page":"Groundwater flow","title":"Connectivity","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The connectivity between cells is defined as follows.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Wflow.Connectivity","category":"page"},{"location":"model_docs/lateral/gwf/#Wflow.Connectivity","page":"Groundwater flow","title":"Wflow.Connectivity","text":"Connectivity{T}\n\nStores connection data between cells. Connections are stored in a compressed sparse column (CSC) adjacency matrix: only non-zero values are stored. Primarily, this consist of two vectors:\n\nthe row value vector holds the cell indices of neighbors\nthe column pointers marks the start and end index of the row value vector\n\nThis matrix is square: n = m = ncell. nconnection is equal to nnz (the number of non-zero values).\n\nncell: the number of (active) cells in the simulation\nnconnection: the number of connections between cells\nlength1: for every connection, the length in the first cell, size nconnection\nlength2: for every connection, the length in the second cell, size nconnection\nwidth: width for every connection, (approx.) perpendicular to length1 and length2, size nconnection\ncolptr: CSC column pointer (size ncell + 1)\nrowval: CSC row value (size nconnection)\n\n\n\n\n\n","category":"type"},{"location":"model_docs/lateral/gwf/#Constant-head","page":"Groundwater flow","title":"Constant head","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Dirichlet boundary conditions can be specified through the field constanthead (type ConstantHead) of the GroundwaterFlow struct.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"@get_units struct ConstantHead{T}\n head::Vector{T} | \"m\"\n index::Vector{Int} | \"-\"\nend","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"For the model SBM + Groundwater flow this boundary condition is optional, and if used should be specified in the TOML file as follows (see also sbm_gwf_config.toml):","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"[model]\nconstanthead = true","category":"page"},{"location":"model_docs/lateral/gwf/#Aquifer-boundary-conditions","page":"Groundwater flow","title":"Aquifer boundary conditions","text":"","category":"section"},{"location":"model_docs/lateral/gwf/#River","page":"Groundwater flow","title":"River","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The flux between river and aquifer is calculated using Darcy's law following the approach in MODFLOW:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":" subtextQriv = \n beginalign*\n begincases\n C_i min leftsubtexthriv - subtextBriv subtexthriv - phiright text if quad subtexthriv phi \n C_e (subtexthriv - phi) text if quad subtexthriv le phi\n endcases\n endalign*","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":" where SIbsubtextQrivL^3 T^-1 is the exchange flux from river to aquifer, SIbC_iL^2 T^-1 is the river bed infiltration conductance, SIbC_eL^2 T^-1 is the river bed exfiltration conductance, SIbsubtextBrivL the bottom of the river bed, SIbsubtexthrivL is the river stage and SIbphiL is the hydraulic head in the river cell.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The Table in the Groundwater flow river boundary condition section of the Model parameters provides the parameters of the struct River. Parameters that can be set directly from the static input data (netCDF) are marked in this Table.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The exchange flux (river to aquifer) subtextQriv is an output variable (field flux of the River struct), and is used to update the total flux in a river cell. For the model SBM + Groundwater flow, the water level SIbhm of the river kinematic wave in combination with the river bottom is used to update the stage field of the River struct each time step.","category":"page"},{"location":"model_docs/lateral/gwf/#Drainage","page":"Groundwater flow","title":"Drainage","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The flux from drains to the aquifer is calculated as follows:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"subtextQdrain = subtextCdrain min(0 subtexthdrain - phi)","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"where SIbsubtextQdrainL^3 T^-1 is the exchange flux from drains to aquifer, SIbsubtextCdrainL^2 T^-1 is the drain conductance, SIbsubtexthdrainL is the drain elevation and SIbphiL is the hydraulic head in the cell with drainage.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The table in the Groundwater flow drainage boundary condition section of the Model parameters provides the parameters of the struct Drainage. Parameters that can be set directly from the static input data (netCDF) are marked in this Table.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The exchange flux (drains to aquifer) subtextQdrain is an output variable (field flux of struct Drainage), and is used to update the total flux in a cell with drains. For the model SBM + Groundwater flow this boundary condition is optional, and if used should be specified in the TOML file as follows (see also sbm_gwf_config.toml):","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"[model]\ndrains = true","category":"page"},{"location":"model_docs/lateral/gwf/#Recharge","page":"Groundwater flow","title":"Recharge","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The recharge flux Q_r to the aquifer is calculated as follows:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Q_r = R A","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"with SIbL T^-1 the recharge rate and SIbAL^2 the area of the aquifer cell.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The table in the Groundwater flow recharge boundary condition section of the Model parameters section provides the parameters of the struct Recharge. Parameters that can be set directly from the static input data (netCDF) are marked in this Table.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The recharge flux Q_r is an output variable (field flux of struct Recharge), and is used to update the total flux in a cell where recharge occurs. For the model SBM + Groundwater flow, the recharge rate from the vertical SBM concept recharge [mm] is used to update the rate field of the Recharge struct each time step. The rate field is multiplied by the area field of the aquifer.","category":"page"},{"location":"model_docs/lateral/gwf/#Head-boundary","page":"Groundwater flow","title":"Head boundary","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"This boundary is a fixed head with time (not affected by the model stresses over time)) outside of the model domain, and is generally used to avoid an unnecessary extension of the model domain to the location of the fixed boundary (for example a large lake). The flux from the boundary SIbQ_hbL^3 T^-1 is calculated as follows:","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Q_hb = C_hb (phi_hb - phi)","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"with SIbC_hbL^2 T^-1 the conductance of the head boundary, SIbphi_hbL the head of the head boundary and phi the head of the aquifer cell.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The table in the Groundwater flow head boundary condition section of the Model parameters provides the parameters of the struct HeadBoundary.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The head boundary flux Q_hb is an output variable (field flux of struct HeadBoundary), and is used to update the total flux in a cell where this type of boundary occurs. The parameter Head phi_hb can be specified as a fixed or time dependent value.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"note: Note\nThis boundary is not (yet) part of the model SBM + Groundwater flow.","category":"page"},{"location":"model_docs/lateral/gwf/#Well-boundary","page":"Groundwater flow","title":"Well boundary","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"A volumetric well rate SIbL^3 T^-1 can be specified as a boundary condition.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The Table in the well boundary condition section of the Model parameters provides the parameters of the struct Well.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"The volumetric well rate subtextQwell can be can be specified as a fixed or time dependent value. If a cell is dry, the actual well flux flux is set to zero (see also the last note on this page).","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"note: Note\nThis boundary is not (yet) part of the model SBM + Groundwater flow.","category":"page"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"note: Note\nFor an unconfined aquifer the boundary fluxes are checked, in case of a dry aquifer cell a negative flux is not allowed.","category":"page"},{"location":"model_docs/lateral/gwf/#References","page":"Groundwater flow","title":"References","text":"","category":"section"},{"location":"model_docs/lateral/gwf/","page":"Groundwater flow","title":"Groundwater flow","text":"Chu, W. S., & Willis, R. (1984). An explicit finite difference model for unconfined aquifers. Groundwater, 22(6), 728-734.\nGoode, D. J., & Appel, C. A. (1992). Finite-Difference Interblock Transmissivity for Unconfined Aquifers and for Aquifers having Smoothly Varying Transmissivity Water-resources investigations report, 92, 4124.\nJohnson, A. I. (1967), Specific yield: compilation of specific yields for various materials, Water Supply Paper 1662-D, Washington, D.C.: U.S. Government Printing Office, p. 74, doi:10.3133/wsp1662D.\nLangevin, C.D., Hughes, J.D., Banta, E.R., Niswonger, R.G., Panday, Sorab, and Provost, A.M., 2017, Documentation for the MODFLOW 6 Groundwater Flow Model: U.S. Geological Survey Techniques and Methods, book 6, chap. A55, 197 p., https://doi.org/10.3133/tm6A55.\nMcDonald, M.G., Harbaugh, A.W., Orr, B.R., and Ackerman, D.J., 1991, A method of converting no-flow cells to variable-head cells for the U.S. Geological Survey modular finite-difference groundwater flow model: U.S. Geological Survey Open-File Report 91-536, 99 p.\nNiswonger, R.G., Panday, Sorab, and Ibaraki, Motomu, 2011, MODFLOW-NWT, A Newton formulation for MODFLOW-2005: U.S. Geological Survey Techniques and Methods 6-A37, 44 p.","category":"page"}] +} diff --git a/previews/PR490/siteinfo.js b/previews/PR490/siteinfo.js new file mode 100644 index 000000000..dcdaa8cb3 --- /dev/null +++ b/previews/PR490/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR490"; diff --git a/previews/PR490/user_guide/additional_options/index.html b/previews/PR490/user_guide/additional_options/index.html new file mode 100644 index 000000000..315e92b93 --- /dev/null +++ b/previews/PR490/user_guide/additional_options/index.html @@ -0,0 +1,144 @@ + +Additional wflow options · Wflow.jl

    Additional wflow options

    Starting the model with "warm" states

    The state section in the TOML file provides information on the input file if the model is initialized with a warm state (path_input) and to what file the states are written at the end of the model run (path_output). Please note that the model setting reinit needs to be set to false in order to initialize the model with states from the file located at path_input. A mapping between external state names and internal model states is required. This information is specified for each model component, the vertical model and lateral model components. In the example below the vertical component represents the SBM concept, and for the lateral components there is a river (including optional reservoir, lake and floodplain components), land and subsurface domain. The internal model states are listed on the left side, and the external state names are listed on the right side. Note that path_input is only required when reinit is set to false. path_output is optional, an output state file is only written when it is defined. If neither is set, the entire state section can be left out.

    [model]
    +reinit = false # cold (reinit = true) or warm state (reinit = false), default is true
    +
    +[state]
    +path_input = "data/instates-moselle.nc"     # Location of the file with the input states
    +path_output = "data/outstates-moselle.nc"   # Output location of the states after the model run
    +
    +[state.vertical]
    +satwaterdepth = "satwaterdepth"
    +snow = "snow"
    +tsoil = "tsoil"
    +ustorelayerdepth = "ustorelayerdepth"
    +canopystorage = "canopystorage"
    +snowwater = "snowwater"
    +glacierstore ="glacierstore"
    +
    +[state.lateral.river]
    +q = "q_river"
    +h = "h_river"
    +h_av = "h_av_river"
    +
    +[state.lateral.river.floodplain] 
    +q = "q_floodplain"
    +h = "h_floodplain"
    +
    +[state.lateral.river.reservoir]
    +volume = "volume_reservoir"
    +
    +[state.lateral.river.lake]
    +waterlevel = "waterlevel_lake"
    +
    +[state.lateral.subsurface]
    +ssf = "ssf"
    +
    +[state.lateral.land]
    +q = "q_land"
    +h = "h_land"
    +h_av = "h_av_land"

    Enabling snow and glacier processes

    [model]
    +snow = true
    +masswasting = true
    +glacier = true
    +
    +[input.vertical]
    +tt = "TT"
    +tti = "TTI"
    +ttm = "TTM"
    +water_holding_capacity = "WHC"
    +glacierstore = "wflow_glacierstore"
    +glacierfrac = "wflow_glacierfrac"
    +g_cfmax = "G_Cfmax"
    +g_tt = "G_TT"
    +g_sifrac = "G_SIfrac"

    Enabling reservoirs

    [model]
    +reservoirs = true
    +
    +[input.lateral.river.reservoir]
    +area = "ResSimpleArea"
    +areas = "wflow_reservoirareas"
    +demand = "ResDemand"
    +locs = "wflow_reservoirlocs"
    +maxrelease = "ResMaxRelease"
    +maxvolume = "ResMaxVolume"
    +targetfullfrac = "ResTargetFullFrac"
    +targetminfrac = "ResTargetMinFrac"
    +
    +[state.lateral.river.reservoir]
    +volume = "volume_reservoir"

    Enabling lakes

    [model]
    +lakes = true
    +
    +[input.lateral.river.lake]
    +area = "lake_area"
    +areas = "wflow_lakeareas"
    +b = "lake_b"
    +e = "lake_e"
    +locs = "wflow_lakelocs"
    +outflowfunc = "lake_outflowfunc"
    +storfunc  = "lake_storfunc"
    +threshold  = "lake_threshold"
    +waterlevel = "lake_waterlevel"
    +
    +[state.lateral.river.lake]
    +waterlevel = "waterlevel_lake"

    Enabling Floodplain routing

    As part of the local inertial model for river flow.

    [model]
    +floodplain_1d = true
    +
    +[input.lateral.river.floodplain]
    +volume = "floodplain_volume"
    +n = "floodplain_n"
    +
    +[state.lateral.river.floodplain] 
    +q = "q_floodplain"
    +h = "h_floodplain"

    Enabling water demand and allocation

    The model types sbm and sbm_gwf support water demand and allocation computations, in combination with the kinematic wave and local inertial runoff routing scheme for river and overland flow.

    # example of water demand and allocation input parameters as cyclic data
    +[input]
    +cyclic = ["vertical.domestic.demand_gross", "vertical.domestic.demand_net", 
    +"vertical.industry.demand_gross", "vertical.industry.demand_net", 
    +"vertical.livestock.demand_gross", "vertical.livestock.demand_net", 
    +"vertical.paddy.irrigation_trigger", "vertical.nonpaddy.irrigation_trigger",]
    +
    +[model.water_demand]
    +domestic = true     # optional, default is "false"
    +industry = true     # optional, default is "false"
    +livestock = true    # optional, default is "false"
    +paddy = true        # optional, default is "false"
    +nonpaddy = true     # optional, default is "false"
    +
    +[input.vertical.allocation]
    +areas = "allocation_areas"
    +frac_sw_used = "SurfaceWaterFrac"
    +
    +[input.vertical.domestic]
    +demand_gross = "dom_gross"
    +demand_net = "dom_net"
    +
    +[input.vertical.industry]
    +demand_gross = "ind_gross"
    +demand_net = "ind_net"
    +
    +[input.vertical.livestock]
    +demand_gross = "lsk_gross"
    +demand_net = "lsk_net"
    +
    +[input.vertical.paddy]
    +irrigation_areas = "paddy_irrigation_areas"
    +irrigation_trigger = "irrigation_trigger"
    +
    +[input.vertical.nonpaddy]
    +irrigation_areas = "nonpaddy_irrigation_areas"
    +irrigation_trigger = "irrigation_trigger"
    +
    +# required if paddy is set to "true"
    +[state.vertical.paddy]
    +h = "h_paddy"

    Using multithreading

    Using wflow in Julia

    Wflow supports multi-threading execution of the wflow_sbm model that uses the kinematic wave approach for river, overland and lateral subsurface flow. Both the vertical SBM concept and the kinematic wave components of this model can run on multiple threads. The optional local inertial model for river flow and the optional local inertial model for river (1D) and land (2D), both part of wflow_sbm, can also run on multiple threads. The threading functionality for the kinematic wave may also be useful for models that make (partly) use of this routing approach as the wflow_hbv model and the wflow_sbm model SBM + Groundwater flow. The multi-threading functionality in wflow is considered experimental, see also the following issue, where an error was not thrown running code multi-threaded. Because of this we advise to start with running a wflow model single-threaded (for example during the testing phase of setting up an new wflow model).

    For information on how to start Julia with multiple threads we refer to How to start Julia with multiple threads.

    Additionally, when running Julia + wflow via the command line (note that this is different from the wflow_cli), it is possible to define the number of threads via the -t flag. An example where we start Julia with three threads:

    julia -t 3 -e 'using Wflow; Wflow.run()' path/to/config.toml

    Using the command line interface

    As explained above, we need to start julia with multiple threads to make use of this speedup. For wflow_cli, the only way to do this is by setting the JULIA_NUM_THREADS environment variable, as explained in these julia docs.

    When a model run starts, among the run information the number of threads that are used is printed, so nthreads() = 4 means 4 threads are used, because JULIA_NUM_THREADS has been set to 4.

    Using the Basic Model Interface

    Introduction

    The Community Surface Dynamics Modeling System (CSMDS) has developed the Basic Model Interface (BMI). BMI consists of a set of standard control and query functions that can be added by a developer to the model code and makes a model both easier to learn and easier to couple with other software elements.

    For more information see also: http://csdms.colorado.edu/wiki/BMI_Description

    CSDMS provides specifications for the languages C, C++, Fortran and Python. Wflow, written in the Julia programming language, makes use of the following Julia specification, based on BMI 2.0 version.

    For the BMI implementation of wflow all grids are defined as unstructured grids, including the special cases scalar and points. While the input (forcing and model parameters) is structured (uniform rectilinear), internally wflow works with one dimensional arrays based on the active grid cells of the 2D model domain.

    Configuration

    The variables that wflow can exchange through BMI are based on the different model components and these components should be listed under the API section of the TOML configuration file of the model type. Below an example of this API section, that lists the vertical component and different lateral components:

    [API]
    +components = [
    +  "vertical",
    +  "lateral.subsurface",
    +  "lateral.land",
    +  "lateral.river",
    +  "lateral.river.reservoir"
    +]

    See also:

    BasicModelInterface.initializeFunction
    BMI.initialize(::Type{<:Wflow.Model}, config_file)

    Initialize the model. Reads the input settings and data as defined in the Config object generated from the configuration file config_file. Will return a Model that is ready to run.

    source
    BasicModelInterface.get_input_var_namesFunction
    BMI.get_input_var_names(model::Model)

    Returns model input variables, based on the API section in the model configuration file. This API sections contains a list of Model components for which variables can be exchanged.

    source

    Variables with a third dimension, for example layer as part of the vertical SBM concept, are exposed as two-dimensional grids through the wflow BMI implementation. For these variables the index of this third dimension is required, by adding [k] to the variable name (k refers to the index of the third dimension). For example, the variable vertical.vwc[1] refers to the first soil layer of the vertical SBM concept.

    Couple to a groundwater model

    For the coupling of wflow_sbm (SBM + kinematic wave) with a groundwater model (e.g. MODFLOW) it is possible to run:

    • wflow_sbm in parts from the BMI, and
    • to switch off the lateral subsurface flow component of wflow_sbm.

    The lateral subsurface component of wflow_sbm is not initialized by wflow when the [input.lateral.subsurface] part of the TOML file is not included. Then from the BMI it is possible to run first the recharge part of SBM:

    model = BMI.update(model, run="sbm_until_recharge")

    and to exchange recharge and for example river waterlevels to the groundwater model. After the groundwater model update, and the exchange of groundwater head and for example drain and river flux to wflow_sbm, the SBM part that mainly determines exfiltration of water from the unsaturated store, and the kinematic wave for river - and overland flow can be run as follows:

    model = BMI.update(model, run="sbm_after_subsurfaceflow")

    See also:

    BasicModelInterface.updateFunction
    BMI.update(model::Model; run = nothing)

    Update the model for a single timestep.

    Arguments

    • run = nothing: to update a model partially.
    source

    Run from Delft-FEWS

    Wflow integrates easily as part of an operational system by linking to the Delft-FEWS platform. Delft-FEWS integrates data and models, and is for example used in many active flood forecasting systems around the world.

    This can be done without a model adapter that provides the interface between Delft-FEWS and an external model (or module). This is possible because time information in the TOML configuration file is optional and Delft-FEWS can import and export netCDF files. When time information is left out from the TOML configuration file, the starttime, endtime and timestepsecs (timestep) of the run is extracted from the netCDF forcing file by wflow.

    To indicate that a wflow model runs from Delft-FEWS, the following setting needs to be specified in the main section of the TOML configuration file:

    fews_run = true  # optional, default value is false

    This ensures that wflow offsets the time handling, to meet the expectations of Delft-FEWS.

    It also uses a different format for the log file such that each log message takes up only one line. That meets the General Adapter logFile expectations, which then can get parsed with these Delft-FEWS log parsing settings:

    <logFile>
    +    <file>log.txt</file>
    +    <errorLinePattern >* [Error] *</errorLinePattern >
    +    <warningLinePattern>* [Warn] *</warningLinePattern>
    +    <infoLinePattern>* [Info] *</infoLinePattern>
    +    <debugLinePattern >* [Debug] *</debugLinePattern >
    +</logFile>

    Run wflow as a ZMQ Server

    It is possible to run wflow as a ZMQ Server, for example for the coupling to the OpenDA software for data-assimilation. The code for the wflow ZMQ Server is not part of the Wflow.jl package, and is located here.

    diff --git a/previews/PR490/user_guide/install/index.html b/previews/PR490/user_guide/install/index.html new file mode 100644 index 000000000..12868ba82 --- /dev/null +++ b/previews/PR490/user_guide/install/index.html @@ -0,0 +1,3 @@ + +How to install · Wflow.jl

    How to install

    First, download and install the current stable release of Julia. If you have any issues installing Julia, please see platform specific instructions for further instructions.

    If you are new to Julia, it might be a good idea to check out the Getting Started section of the Julia Manual. You can also find additional learning resources at julialang.org/learning.

    Wflow can be used in two different ways, depending on the required use of the code:

    • If you want to stay up-to-date with the latest version, explore and modify the model code, and write your own Julia scripts around the wflow package, we recommend installing wflow as a Julia package.
    • If you don't need extra features, but just want to run simulations, a compiled executable version is available. This version includes a single executable, wflow_cli, which allows you to run the model via the command line.

    Below we describe how to install both versions of wflow.

    Installing as Julia package

    Wflow is a Julia package that can be installed in several ways. Below, we show how to install wflow from Julia's package repository and how to install the latest version from GitHub.

    Install from Julia's package repository

    To access Julia's package manager, press ] in the Julia REPL. To get back to the Julia REPL, press backspace or ^C.

    Tip

    If you haven't used Julia in a while, it's a good idea to run up to update your packages.

    pkg> up

    To access Julia's package manager and install wflow, use:

    pkg> add Wflow

    This process can take a while, especially on the first run, as compatible dependencies are automatically resolved and installed from the Pkg General registry.

    Install from GitHub

    You can also install wflow from the master branch on the repository as follows:

    pkg> add Wflow#master

    This command tracks the master branch and updates to the latest commit on that branch when you run update, or simply up, in the Pkg REPL. The add installs wflow in your home directory under .julia/packages/Wflow. Note that packages installed under packages by add should not be changed in the directory, as the change could disrupt Pkg's automatic dependency handling.

    If you want to modify any files in the repository, you need to do a development install. This can be done using:

    pkg> dev Wflow

    This will clone the git repository, place it under your home directory in .julia/dev/Wflow, and add the wflow package to your project environment. To receive updates, you'll need to pull the latest changes manually using git pull.

    Check installation of wflow

    Finally, go back to the Julia REPL and try to load wflow:

    julia> using Wflow

    The first time you do this, it may take longer as any new or changed packages need to be precompiled to enable faster loading on subsequent uses. No error messages should appear, which indicates that you have successfully installed wflow.

    Before concluding this section, we recommend a few tools that can make using and developing Julia code easier.

    Tip

    There is a section on editors and IDEs for Julia on https://julialang.org/, scroll down to see it. We use and recommend Microsoft's free and open source Visual Studio Code. Combined with the Julia extension it provides a powerful and interactive development experience.

    Tip

    If you plan to modify the code of wflow, we recommend installing the Revise.jl package. This package allows you to modify code and use the changes without restarting Julia. Install it with add Revise from the Pkg REPL. Then create a file called .julia/config/startup.jl, and put using Revise there. This will load Revise every time you start a Julia session.

    Installing the compiled executable

    Binaries of wflow_cli can be downloaded from our website download.deltares.nl, and are currently available for Windows. Download and install the .msi file. After installation, you will see two folders in the installation directory. Only the bin/wflow_cli is used. The artifacts folder contains binary dependencies such as netCDF.

    artifacts\
    +bin\wflow_cli

    To verify whether the installation was completed successfully, run wflow_cli with no arguments in the command line. This will display the following message:

    Usage: wflow_cli 'path/to/config.toml'
    Note

    The old version of wflow, which was based on Python and PCRaster libraries, is also available for download from our website download.deltares.nl. We recommend installing the Julia version, as this documentation is written to support this version.

    diff --git a/previews/PR490/user_guide/intro/index.html b/previews/PR490/user_guide/intro/index.html new file mode 100644 index 000000000..7dc585e0c --- /dev/null +++ b/previews/PR490/user_guide/intro/index.html @@ -0,0 +1,2 @@ + +About the user guide · Wflow.jl

    About the user guide

    The purpose of this user guide is to describe the steps for installing the wflow Julia software and setting up a simple model. The guide also includes a step-by-step process for configuring your model using the TOML file (model settings) and the netCDF gridded datasets.

    Sample data and model setup are also provided for the Moselle River Basin (a major tributary of the Rhine River), which can be used to explore the model software. The guide covers model setups for the wflow\_sbm, wflow\_hbv and wflow\_sediment model concepts.

    Finally, the guide offers information on setting up your own model, including building a model from scratch or alternatively using Deltares HydroMT model building tools, which are open source.

    diff --git a/previews/PR490/user_guide/model-setup/index.html b/previews/PR490/user_guide/model-setup/index.html new file mode 100644 index 000000000..7cada6118 --- /dev/null +++ b/previews/PR490/user_guide/model-setup/index.html @@ -0,0 +1,2 @@ + +Building a model from scratch · Wflow.jl

    Building a model from scratch

    Data requirements

    The actual data requirements depend on the application of the Model and the Model type. Both forcing and static data should be provided in netCDF format, with the same grid definition for forcing and static data. The only exception is storage and rating curves for lakes, that should be provided in CSV format, see also Additional settings.

    • Forcing data:
      • Precipitation
      • Potential evapotranspiration
      • Temperature (optional, only needed for snow and glacier modelling)

    The requirements for static data (including model parameters) depend on the Model type. The following data is required for all Model types, but not directly part of a Model component:

    • flow direction data (D8)
    • river map (location of the river)
    • sub-catchment map (model domain)

    For the flow direction (D8) data, the PCRaster ldd convention is used, see also PCRaster ldd. An approach to generate ldd data is to make use of the Python package pyflwdir:

    see also Eilander et al. (2021) for more information. Pyflwdir is also used by the hydroMT Python package described in the next paragraph. Another approach to generate ldd data is to make use of PCRaster functionality, see for example lddcreate.

    Optionally, but also not directly part of a model component are gauge locations, that are used to extract gridded data from certain locations.

    The different supported model configurations are described in the section Model configurations. Wflow_sbm models have the vertical concept SBM in common and input parameters for this component are described in the SBM section of Model parameters. For wflow_sbm models there are two ways to include subsurface flow:

    1. The kinematic wave approach (see section Subsurface flow routing) as part of the sbm model type. Parameters that are part of this component are described in the Lateral subsurface flow section of Model parameters. Input parameters for this component are derived from the SBM vertical concept and the land slope. One external parameter ksathorfrac is used to calculate the horizontal hydraulic conductivity at the soil surface kh_0.
    2. Groundwater flow (see section Groundwater flow component) as part of the sbm_gwf model type. For the unconfined aquifer the input parameters are described in the section Unconfined aquifer of Model parameters. The bottom (bottom) of the groundwater layer is derived from from the soilthickness [mm] parameter of SBM and the provided surface elevation altitude [m] as part of the static input. The area parameter is derived from the model grid. Parameters that are part of the boundary conditions of the unconfined aquifer are listed under Constant Head and Boundary conditions of the Model parameters section.

    Most hydrological model configurations make use of the kinematic wave surface routing (river flow, overland flow or both) and input data required for the river and overland flow components is described in Surface flow. There is also the option to use the local inertial model as part of the wflow_sbm models (model types sbm and sbm_gwf):

    Input parameters for this approach are described in River flow (local inertial), including the optional 1D floodplain schematization, and Overland flow (local inertial) of the Model parameters section.

    Reservoirs or lakes can be part of the kinematic wave or local inertial model for river flow and input parameters are described in Reservoirs and Lakes.

    The wflow_hbv model configuration consists besides the river and overland flow components of the HBV vertical concept. Input parameters for this component are described in the HBV section of Model parameters. For the river and overland flow components the kinematic wave approach is used.

    The wflow_flextopo model configuration consists besides the river and overland flow components of the FLEXTopo vertical concept. Input parameters for this component are described in the FLEXTopo section of Model parameters. For the river and overland flow components the kinematic wave approach is used.

    The wflow_sediment model configuration consists of the vertical Soil Erosion concept and the input parameters for this concept are described in the Sediment section of the Model parameters. The parameters of the lateral Sediment Flux in overland flow concept are described in the Overland flow section of the Model parameters. Parameters of this component are not directly set by data from static input. The input parameters of the lateral concept River Sediment Model are listed in River flow of the Model parameters section.

    The Model parameters section lists all the parameters per Model component and these Tables can also be used to check which parameters can be part of the output, see also Output netCDF section and Output CSV section.

    Example models can be found in the Example models section.

    hydroMT

    hydroMT is a Python package, developed by Deltares, to build and analyze hydro models. It provides a generic model api with attributes to access the model schematization, (dynamic) forcing data, results and states.

    For the following wflow_sbm model (modeltype sbm) configurations:

    and the wflow_sediment model configuration, the wflow plugin hydroMT-wflow of hydroMT can be used to build and analyze these wflow models in an automated way.

    To learn more about the wflow plugin of this Python package, we refer to the hydroMT-wflow documentation.

    To inspect or modify (for example in QGIS) the netCDF static data of these wflow models it is convenient to export the maps to a raster format. This can be done as part of the hydroMT-wflow plugin, see also the following example. It is also possible to create again the netCDF static data file based on the modified raster map stack.

    References

    • Yamazaki, D., Ikeshima, D., Sosa, J., Bates, P. D., Allen, G. H. and Pavelsky, T. M.: MERIT Hydro: A high‐resolution global hydrography map based on latest topography datasets, Water Resour. Res., 2019WR024873, doi:10.1029/2019WR024873, 2019.
    • Eilander, D., van Verseveld, W., Yamazaki, D., Weerts, A., Winsemius, H. C., and Ward, P. J.: A hydrography upscaling method for scale-invariant parametrization of distributed hydrological models, Hydrol. Earth Syst. Sci., 25, 5287–5313, https://doi.org/10.5194/hess-25-5287-2021, 2021.
    diff --git a/previews/PR490/user_guide/sample_data/index.html b/previews/PR490/user_guide/sample_data/index.html new file mode 100644 index 000000000..18afeaeba --- /dev/null +++ b/previews/PR490/user_guide/sample_data/index.html @@ -0,0 +1,71 @@ + +Example models · Wflow.jl

    Example models

    For each wflow Model a test model is available that can help to understand the data requirements and the usage of each Model. The TOML configuration file per available model are listed in the Table below:

    modelTOML configuration file
    wflow_sbm + kinematic wavesbm_config.toml
    wflow_sbm + groundwater flowsbm_gwf_config.toml
    wflow_hbvhbv_config.toml
    wflow_flextopoflextopo_config.toml
    wflow_sedimentsediment_config.toml

    The associated Model files (input static, forcing and state files) can easily be downloaded and for this we share the following Julia code (per Model) that downloads the required files to your current working directory. For running these test model see also Usage and Command Line Interface.

    wflow_sbm + kinematic wave

    # urls to TOML and netCDF of the Moselle example model
    +toml_url = "https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sbm_config.toml"
    +staticmaps = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.9/staticmaps-moselle.nc"
    +forcing = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.6/forcing-moselle.nc"
    +instates = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.6/instates-moselle.nc"
    +
    +# create a "data" directory in the current directory
    +datadir = joinpath(@__DIR__, "data")
    +mkpath(datadir)
    +toml_path = joinpath(@__DIR__, "sbm_config.toml")
    +
    +# download resources to current and data dirs
    +download(staticmaps, joinpath(datadir, "staticmaps-moselle.nc"))
    +download(forcing, joinpath(datadir, "forcing-moselle.nc"))
    +download(instates, joinpath(datadir, "instates-moselle.nc"))
    +download(toml_url, toml_path)

    wflow_sbm + groundwater flow

    # urls to TOML and netCDF of the Moselle example model
    +toml_url = "https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sbm_gwf_config.toml"
    +staticmaps = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.3/staticmaps-sbm-groundwater.nc"
    +forcing = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.1/forcing-sbm-groundwater.nc"
    +
    +# create a "data" directory in the current directory
    +datadir = joinpath(@__DIR__, "data")
    +mkpath(datadir)
    +toml_path = joinpath(@__DIR__, "sbm_gwf_config.toml")
    +
    +# download resources to current and data dirs
    +download(staticmaps, joinpath(datadir, "staticmaps-sbm-groundwater.nc"))
    +download(forcing, joinpath(datadir, "forcing-sbm-groundwater.nc"))
    +download(toml_url, toml_path)

    wflow_hbv

    # urls to TOML and netCDF of the Moselle example model
    +toml_url = "https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/hbv_config.toml"
    +staticmaps = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.1/staticmaps-lahn.nc"
    +forcing = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.0/forcing-lahn.nc"
    +
    +# create a "data" directory in the current directory
    +datadir = joinpath(@__DIR__, "data")
    +mkpath(datadir)
    +toml_path = joinpath(@__DIR__, "hbv_config.toml")
    +
    +# download resources to current and data dirs
    +download(staticmaps, joinpath(datadir, "staticmaps-lahn.nc"))
    +download(forcing, joinpath(datadir, "forcing-lahn.nc"))
    +download(toml_url, toml_path)

    wflow_flextopo

    # urls to TOML and netCDF of the Meuse example model
    +toml_url = "https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/flextopo_config.toml"
    +staticmaps = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.8/staticmaps_flex_meuse.nc"
    +forcing = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.8/forcing_meuse.nc"
    +
    +# create a "data" directory in the current directory
    +datadir = joinpath(@__DIR__, "data")
    +mkpath(datadir)
    +toml_path = joinpath(@__DIR__, "flextopo_config.toml")
    +
    +# download resources to current and data dirs
    +download(staticmaps, joinpath(datadir, "staticmaps_flex_meuse.nc"))
    +download(forcing, joinpath(datadir, "forcing_meuse.nc"))
    +download(toml_url, toml_path)

    wflow_sediment

    # urls to TOML and netCDF of the Moselle example model
    +toml_url = "https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sediment_config.toml"
    +staticmaps = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.3/staticmaps-moselle-sed.nc"
    +forcing = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.3/forcing-moselle-sed.nc"
    +instates = "https://github.com/visr/wflow-artifacts/releases/download/v0.2.0/instates-moselle-sed.nc"
    +
    +# create a "data" directory in the current directory
    +datadir = joinpath(@__DIR__, "data")
    +mkpath(datadir)
    +toml_path = joinpath(@__DIR__, "sediment_config.toml")
    +
    +# download resources to current and data dirs
    +download(staticmaps, joinpath(datadir, "staticmaps-moselle-sed.nc"))
    +download(forcing, joinpath(datadir, "forcing-moselle-sed.nc"))
    +download(instates, joinpath(datadir, "instates-moselle-sed.nc"))
    +download(toml_url, toml_path)
    diff --git a/previews/PR490/user_guide/step1_requirements/index.html b/previews/PR490/user_guide/step1_requirements/index.html new file mode 100644 index 000000000..7215d9a22 --- /dev/null +++ b/previews/PR490/user_guide/step1_requirements/index.html @@ -0,0 +1,2 @@ + +Step 1: Understanding the requirements · Wflow.jl

    Step 1: Understanding the requirements

    To run wflow, several files are required. These include a settings file and input data. The input data is typically separated into static maps and forcing data, and both are provided in netCDF files, except for lake storage and rating curves that are supplied via CSV files. Below is a brief overview of the different files:

    • The settings.toml file contains information on the simulation period, links to the input files (and their names in the netCDF files), and connect the correct variable names in the netCDF files to the variables and parameters of wflow.
    • The staticmaps.nc file contains spatial information such as elevation, gauge locations, land use, and drainage direction, etc. This file can also contain maps with parameter values.
    • The forcing.nc file contains time series data for precipitation, temperature and potential evaporation (as a 3D array).

    Wflow supports several model configurations, each requiring slightly different input, but with a similar general structure. A wflow model configuration consists of a vertical concept like SBM, HBV or FLEXTOPO in combination with lateral concepts that control how water is routed for example over the land or river domain. For the wflow_sbm model, different model configurations are possible. The following configurations are supported in wflow:

    • wflow_sbm:
      • SBM + kinematic wave for subsurface and surface flow
      • SBM + kinematic wave for subsurface and overland flow + local inertial river (+ optional floodplain)
      • SBM + kinematic wave for subsurface flow + local inertial river (1D) and land (2D)
      • SBM + groundwater flow + kinematic wave for surface flow
    • wflow_hbv: HBV + kinematic wave for surface routing
    • wflow_flextopo: FLEXTOPO + kinematic wave for surface routing
    • wflow_sediment as post processing of wflow_sbm or wflow_hbv output

    In the following pages, some examples will be given on how to prepare a basic wflow_sbm model. Sample data for other model configurations is provided in the sample data section.

    diff --git a/previews/PR490/user_guide/step2_settings_file/index.html b/previews/PR490/user_guide/step2_settings_file/index.html new file mode 100644 index 000000000..82dab4b2d --- /dev/null +++ b/previews/PR490/user_guide/step2_settings_file/index.html @@ -0,0 +1,220 @@ + +Step 2: Preparing the settings file · Wflow.jl

    Step 2: Preparing the settings file

    A settings file is essential for wflow, as it contains information about the model configuration, simulation period, input files, and parameters. The settings are provided in a TOML file. The settings file is structured in several sections, which are explained below. The file paths provided in this file are relative to the location of the TOML file, or to dir_input and dir_output if they are specified.

    General time info

    Time information is optional. When omitted, wflow will perform computations for each timestamp in the forcing netCDF file, except for the first forcing timestamp, which is considered equal to the initial conditions of the wflow model (state time). If you wish to calculate a subset of this time range, or a different timestep, you can specify a starttime, endtime and timestepsecs. The starttime is defined as the model state time. In the TOML file settings below, the starttime is 2000-01-01T00:00:00 (state time) and the first update (and output) of the wflow model is at 2000-01-02T00:00:00. The time_units optional information is used by the writer of the model, for model output in netCDF format. The calendar option allows you to calculate in one of the different CF conventions calendars provided by the CFTime.jl package, such as "360_day". This is useful if you want to calculate climate scenarios which are sometimes provided in these alternative calendars.

    calendar = "standard"                           # optional, this is the default value
    +starttime = 2000-01-01T00:00:00                 # optional, default from forcing netCDF
    +endtime = 2000-02-01T00:00:00                   # optional, default from forcing netCDF
    +time_units = "days since 1900-01-01 00:00:00"   # optional, this is the default value
    +timestepsecs = 86400                            # optional, default from forcing netCDF
    +dir_input = "data/input"                        # optional, default is the path of the TOML
    +dir_output = "data/output"                      # optional, default is the path of the TOML

    Logging

    Wflow prints logging messages at various levels such as debug, info, and error. These messages are sent to both the terminal and a log file. Note that logging to a file is only part of the Wflow.run(tomlpath::AbstractString) method. If you want to debug an issue, it can be helpful to set loglevel = "debug" in the TOML. To avoid flooding the screen, debug messages are only sent to the log file. The following settings will affect the logging:

    silent = false          # optional, default is "false"
    +loglevel = "debug"      # optional, default is "info"
    +path_log = "log.txt"    # optional, default is "log.txt"
    +fews_run = false        # optional, default value is false

    silent avoids logging to the terminal, and only writes to the log file. loglevel controls which levels are filtered out; for instance, the default setting "info" does not print any debug-level messages. Note that for finer control, you can also pass an integer log level. For details, see Julia's Logging documentation. path_log sets the desired output path for the log file. For information on fews_run, see Run from Delft-FEWS.

    Model section

    Model-specific settings can be included in the model section of the TOML file.

    [model]
    +type = "sbm"                        # one of ("sbm", "sbm_gwf, "hbv")
    +masswasting = false                 # include lateral snow transport in the model, default is false
    +snow = false                        # include snow modelling, default is false
    +reinit = true                       # cold (reinit = true) or warm state (reinit = false), default is true
    +reservoirs = false                  # include reservoir modelling, default is false
    +kin_wave_iteration = false          # enable kinematic wave iterations in the model, default is false
    +thicknesslayers = [100, 300, 800]   # specific SBM setting: for each soil layer, a thickness [mm] is specified
    +min_streamorder_river = 5           # minimum stream order to delineate subbasins for river domain, default is 6 (for multi-threading computing purposes)
    +min_streamorder_land = 4            # minimum stream order to delineate subbasins for land domain, default is 5 (for multi-threading computing purposes)
    +

    State options

    The state section in the TOML file provides information about the location of input and output states of the model. This section is mostly relevant if the model needs to start with a "warm" state (i.e. based on the results of a previous simulation). The example below shows how to save the output states of the current simulation, so it can be used to initialize another model in the future. Details on the settings required to start a model with a warm state can be found in the additional model options. If it is not required to store the outstates of the current simulation, the entire state section can be removed.

    [state]
    +path_input = "instates-moselle.nc"
    +path_output = "outstates-moselle.nc"
    +
    +[state.vertical]
    +satwaterdepth = "satwaterdepth"
    +snow = "snow"
    +tsoil = "tsoil"
    +ustorelayerdepth = "ustorelayerdepth"
    +snowwater = "snowwater"
    +canopystorage = "canopystorage"
    +
    +[state.lateral.river]
    +q = "q_river"
    +h = "h_river"
    +h_av = "h_av_river"
    +
    +[state.lateral.river.reservoir]
    +volume = "volume_reservoir"
    +
    +[state.lateral.subsurface]
    +ssf = "ssf"
    +
    +[state.lateral.land]
    +q = "q_land"
    +h = "h_land"
    +h_av = "h_av_land"

    Input section

    The input section of the TOML file contains information about the input forcing and model parameters files (in netCDF format). Forcing is applied to the vertical component of the model, and needs to be mapped to the external netCDF variable name. forcing lists the internal model forcing parameters, and these are mapped to the external netCDF variables listed under the section [input.vertical]. It is possible to provide cyclic parameters to the model (minimum time step of 1 day). In the example below, the internal vertical.leaf_area_index model parameter is mapped to the external netCDF variable "LAI" variable. Cyclic time inputs of parameters can be different (e.g., daily or monthly). The time dimension name of these cylic input parameters in the model parameter netCDF file should start with "time". If a model parameter is not mapped, a default value will be used, if available.

    [input]
    +# use "forcing-year-*.nc" if forcing files are split in time
    +path_forcing = "forcing-moselle.nc"    # Location of the forcing data
    +path_static = "staticmaps-moselle.nc"  # Location of the static data
    +
    +# these are not directly part of the model
    +gauges = "wflow_gauges"
    +ldd = "wflow_ldd"
    +river_location = "wflow_river"
    +subcatchment = "wflow_subcatch"
    +
    +# specify the internal IDs of the parameters which vary over time
    +# the external name mapping needs to be below together with the other mappings
    +forcing = [
    +"vertical.precipitation",
    +"vertical.temperature",
    +"vertical.potential_evaporation",
    +]
    +
    +cyclic = ["vertical.leaf_area_index"]
    +
    +[input.vertical]    # Map internal model variable/parameter names to variable names in the netCDF files
    +altitude = "wflow_dem"
    +c = "c"
    +cf_soil = "cf_soil"
    +cfmax = "Cfmax"
    +e_r = "EoverR"
    +infiltcappath = "InfiltCapPath"
    +infiltcapsoil = "InfiltCapSoil"
    +kext = "Kext"
    +"kv_0" = "KsatVer"
    +leaf_area_index = "LAI"             # Cyclic variable
    +m = "M"
    +maxleakage = "MaxLeakage"
    +pathfrac = "PathFrac"
    +potential_evaporation = "PET"       # Forcing variable
    +precipitation = "P"                 # Forcing variable
    +rootdistpar = "rootdistpar"
    +rootingdepth = "RootingDepth"
    +soilminthickness = "SoilMinThickness"
    +soilthickness = "SoilThickness"
    +specific_leaf = "Sl"
    +storage_wood = "Swood"
    +temperature = "TEMP"                # Forcing variable
    +tt = "TT"
    +tti = "TTI"
    +ttm = "TTM"
    +w_soil = "wflow_soil"
    +water_holding_capacity = "WHC"
    +waterfrac = "WaterFrac"
    +"theta_r" = "thetaR"
    +"theta_s" = "thetaS"
    +
    +[input.lateral.river]
    +length = "wflow_riverlength"
    +n = "N_River"
    +slope = "RiverSlope"
    +width = "wflow_riverwidth"
    +
    +[input.lateral.subsurface]
    +ksathorfrac = "KsatHorFrac"
    +
    +[input.lateral.land]
    +n = "N"
    +slope = "Slope"

    Output netCDF section

    Grid data

    This optional section of the TOML file specifies the output netCDF file for writing gridded model output. It includes a mapping between internal model parameter components and external netCDF variables.

    To limit the size of the resulting netCDF file, file compression can be enabled. Compression increases computational time but can significantly reduce the size of the netCDF file. Set the compressionlevel variable to a value between 0 and 9. A setting of 0 means no compression, while values between 1 and 9 indicate increasing levels of compression (1: least compression, minimal run-time impact, 9: highest compression, maximum run-time impact). If file size is a concern, we recommend using a value of 1, as higher compression levels generally have a limited effect on file size.

    [output]
    +path = "output_moselle.nc"         # Location of the output file
    +compressionlevel = 1               # Compression level (default 0)
    +
    +[output.vertical]   # Mapping of names between internal model components and external netCDF variables
    +satwaterdepth = "satwaterdepth"
    +snow = "snow"
    +tsoil = "tsoil"
    +ustorelayerdepth = "ustorelayerdepth"
    +snowwater = "snowwater"
    +canopystorage = "canopystorage"
    +
    +[output.lateral.river]
    +q = "q_river"
    +h = "h_river"
    +
    +[output.lateral.river.reservoir]
    +volume = "volume_reservoir"
    +
    +[output.lateral.subsurface]
    +ssf = "ssf"
    +
    +[output.lateral.land]
    +q = "q_land"
    +h = "h_land"

    Scalar data

    In addition to gridded data, scalar data can also be written to a netCDF file. Below is an example that shows how to write scalar data to the file "output_scalar_moselle.nc". For each netCDF variable, a name (external variable name) and a parameter (internal model parameter) are required. A reducer can be specified to apply to the model output. See more details in the Output CSV section section. If a map is provided to extract data for specific locations (e.g. gauges) or areas (e.g. subcatchment), the netCDF location names are extracted from these maps. For a specific location (grid cell) a location is required. For layered model parameters and variables that have an extra layer dimension and are part of the vertical sbm concept, an internal layer index can be specified (an example is provided below). Similarly, for model parameters and variables that have an extra dimension classes and are part of the vertical FLEXTopo concept, the class name can be specified. If multiple layers or classes are desired, this can be specified in separate [[netcdf.variable]] entries. Note that the additional dimension should be specified when wflow is integrated with Delft-FEWS, for netCDF scalar data an extra dimension is not allowed by the importNetcdfActivity of the Delft-FEWS General Adapter. In the section Output CSV section, similar functionality is available for CSV. For integration with Delft-FEWS, it is recommended to write scalar data to netCDF format, as the General Adapter of Delft-FEWS can directly ingest data from netCDF files. For more information, see Run from Delft-FEWS.

    [netcdf]
    +path = "output_scalar_moselle.nc"  # Location of the results
    +
    +[[netcdf.variable]] # Extract the values of lateral.river.q using the gauges map, and assign it with the name 'Q' as a variable in the netCDF file
    +name = "Q"
    +map = "gauges"
    +parameter = "lateral.river.q"
    +
    +[[netcdf.variable]] # Using coordinates to extract temperature
    +coordinate.x = 6.255
    +coordinate.y = 50.012
    +name = "vwc_layer2_bycoord"
    +location = "vwc_bycoord"
    +parameter = "vertical.vwc"
    +layer = 2
    +
    +[[netcdf.variable]] # Using indices to extract temperature
    +location = "temp_byindex"
    +name = "temp_index"
    +index.x = 100
    +index.y = 264
    +parameter = "vertical.temperature"

    Output CSV section

    Model output can also be written to a CSV file. Below is an example that writes model output to the file "output_moselle.csv". For each CSV column, a header and parameter (internal model parameter) are required. A reducer can be specified to apply to the model output, with the following available reducers:

    • maximum
    • minimum
    • mean
    • median
    • sum
    • first
    • last
    • only

    with only as the default. To extract data for a specific location (grid cell), the index of the vector, the coordinates coordinate.x and coordinate.y, or the x and y indices of the 2D array (index.x and index.y) can be provided. Additionally, a map can be provided to extract data for certain locations (e.g. gauges) or areas (e.g. subcatchment). In this case, a single entry can lead to multiple columns in the CSV file, which will be of the form header_id, e.g. Q_20, for a gauge with integer ID 20. For layered model parameters and variables that have an extra dimension layer and are part of the vertical sbm concept an internal layer index (see also example below) should be specified. For model parameters and variables that have an extra dimension classes and are part of the vertical FLEXTopo concept, it is possible to specify the class name. If multiple layers or classes are desired, this can be specified in separate [[csv.column]] entries.

    The double brackets in [[csv.column]] follow TOML syntax, indicating that it is part of a list. You can specify as many entries as you want.

    [csv]
    +path = "output_moselle.csv"
    +
    +[[csv.column]]
    +header = "Q"
    +parameter = "lateral.river.q"
    +reducer = "maximum"
    +
    +[[csv.column]]
    +header = "volume"
    +index = 1
    +parameter = "lateral.river.reservoir.volume"
    +
    +[[csv.column]]
    +coordinate.x = 6.255
    +coordinate.y = 50.012
    +header = "temp_bycoord"
    +parameter = "vertical.temperature"
    +
    +[[csv.column]]
    +coordinate.x = 6.255
    +coordinate.y = 50.012
    +header = "vwc_layer2_bycoord"
    +parameter = "vertical.vwc"
    +layer = 2
    +
    +[[csv.column]]
    +header = "temp_byindex"
    +index.x = 100
    +index.y = 264
    +parameter = "vertical.temperature"
    +
    +[[csv.column]]
    +header = "Q"
    +map = "gauges"
    +parameter = "lateral.river.q"
    +
    +[[csv.column]]
    +header = "recharge"
    +map = "subcatchment"
    +parameter = "vertical.recharge"
    +reducer = "mean"

    Modify parameters

    It is possible to modify model parameters and forcing through the TOML file. Two options to modify input parameters are available:

    • Set an input parameter (static) to a uniform value.
    • Modify an input parameter (cyclic and static) or forcing variable using a scale factor and offset.

    For example, to set the input parameter cfmax to an uniform value of 2.5:

    [input.vertical]
    +water_holding_capacity = "WHC"
    +waterfrac = "WaterFrac"
    +cfmax.value = 2.5

    For input parameters with an extra dimension (e.g. layer or classes), one uniform value can be provided or a list of values that matches the length of the additional dimension. For example, a list of values can be provided for input parameter c as follows:

    [input.vertical]
    +water_holding_capacity = "WHC"
    +waterfrac = "WaterFrac"
    +c.value = [10.5, 11.25, 9.5, 7.0]

    To change the forcing variable precipitation with a scale factor of 1.5 and an offset of 0.5:

    [input.vertical.precipitation]
    +netcdf.variable.name = "P"
    +scale = 1.5
    +offset = 0.5

    For input parameters with an extra dimension, it is also possible to modify multiple indices simultaneously with different scale and offset values. In the example below, the external netCDF variable c is modified at layer index 1 and 2, with a scale factor of 2.0 and 1.5 respectively, and an offset of 0.0 for both indices:

    [input.vertical.c]
    +netcdf.variable.name = "c"
    +scale = [2.0, 1.5]
    +offset = [0.0, 0.0]
    +layer = [1, 2]

    Fixed forcing values

    It is possible to set fixed values for forcing parameters through the TOML file. For example, to set temperature to a fixed value of 10 $\degree$C, the complete forcing list is required:

    forcing = [
    +  "vertical.precipitation",
    +  "vertical.temperature",
    +  "vertical.potential_evaporation",
    +]
    +
    +[input.vertical.temperature]
    +value = 10

    Note that the mapping to the external netCDF variable listed under the [input.vertical] section needs to be removed or commented out:

    [input.vertical]
    +potential_evaporation = "PET" # forcing
    +# temperature = "TEMP" # forcing
    +precipitation = "P" # forcing
    diff --git a/previews/PR490/user_guide/step3_input_data/index.html b/previews/PR490/user_guide/step3_input_data/index.html new file mode 100644 index 000000000..0e9522056 --- /dev/null +++ b/previews/PR490/user_guide/step3_input_data/index.html @@ -0,0 +1,75 @@ + +Step 3: Preparing the input data · Wflow.jl

    Step 3: Preparing the input data

    As mentioned before, the input data can be classified into two types:

    • Meteorological forcing: maps with timeseries for each model pixel, with values for precipitation, temperature, and potential evaporation. This data should be provided as a three-dimensional dataset, with the x, y and time dimensions.
    • Static maps.

    Meteorological data

    Meteorological data is provided as a single netCDF file, with several variables containing the forcing data for precipitation, temperature and potential evaporation. The code snippet below shows the contents of the example file (downloaded here), and displaying the content with NCDatasets in Julia. As can be seen, each forcing variable (precip, pet and temp) consists of a three-dimensional dataset (x, y, and time), and each timestep consists of a two-dimensional map with values at each gridcell. Only values within the basin are required.

    Group: /
    +
    +Dimensions
    +   time = 366
    +   y = 313
    +   x = 291
    +
    +Variables
    +  time   (366)
    +    Datatype:    Int64
    +    Dimensions:  time
    +    Attributes:
    +     units                = days since 2000-01-02 00:00:00
    +     calendar             = proleptic_gregorian
    +
    +  y   (313)
    +    Datatype:    Float64
    +    Dimensions:  y
    +    Attributes:
    +     _FillValue           = NaN
    +
    +  x   (291)
    +    Datatype:    Float64
    +    Dimensions:  x
    +    Attributes:
    +     _FillValue           = NaN
    +
    +  spatial_ref
    +    Attributes:
    +     crs_wkt              = GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]
    +     x_dim                = x
    +     y_dim                = y
    +     dim0                 = time
    +
    +  precip   (291 × 313 × 366)
    +    Datatype:    Float32
    +    Dimensions:  x × y × time
    +    Attributes:
    +     _FillValue           = NaN
    +     unit                 = mm
    +     precip_fn            = era5
    +     coordinates          = idx_out spatial_ref mask
    +
    +  idx_out   (291 × 313)
    +    Datatype:    Int32
    +    Dimensions:  x × y
    +
    +  mask   (291 × 313)
    +    Datatype:    UInt8
    +    Dimensions:  x × y
    +
    +  pet   (291 × 313 × 366)
    +    Datatype:    Float32
    +    Dimensions:  x × y × time
    +    Attributes:
    +     _FillValue           = NaN
    +     unit                 = mm
    +     pet_fn               = era5
    +     pet_method           = debruin
    +     coordinates          = idx_out spatial_ref mask
    +
    +  temp   (291 × 313 × 366)
    +    Datatype:    Float32
    +    Dimensions:  x × y × time
    +    Attributes:
    +     _FillValue           = NaN
    +     unit                 = degree C.
    +     temp_fn              = era5
    +     temp_correction      = True
    +     coordinates          = idx_out spatial_ref mask
    +
    +Global attributes
    +  unit                 = mm
    +  precip_fn            = era5
    Note

    Wflow expects right labeling of the forcing time interval, e.g. daily precipitation at 01-02-2000 00:00:00 is the accumulated total precipitation between 01-01-2000 00:00:00 and 01-02-2000 00:00:00.

    Static data

    List of essential static data

    The list below contains a brief overview of several essential static maps required to run wflow. These NC variables names refer to the example data of the wflow_sbm + kinematic wave model (see here). Example data for the other model configurations can be found here.

    DescriptionNC variable nameunit
    Flow direction (1-9)wflow_ldd-
    Map indicating the river cells (0-1)wflow_river-
    The length of the riverwflow_riverlengthm
    The width of the riverwflow_riverwidthm
    Mask of the basinwflow_subcatch-
    Land slopeSlopem m$^{-1}$
    River slopeRiverSlopem m$^{-1}$

    As mentioned before, the model parameters can also be defined as spatial maps. They can be included in the same netCDF file, as long as their variable names are correctly mapped in the TOML settings file. See the section on example models on how to use this functionality.

    diff --git a/previews/PR490/user_guide/step4_running/index.html b/previews/PR490/user_guide/step4_running/index.html new file mode 100644 index 000000000..5a1595876 --- /dev/null +++ b/previews/PR490/user_guide/step4_running/index.html @@ -0,0 +1,15 @@ + +Step 4: Running a simulation · Wflow.jl

    Step 4: Running a simulation

    Using Julia

    Once you installed Julia and Wflow.jl, a simulation can be started from the command line as follows:

    julia -e 'using Wflow; Wflow.run()' path/to/config.toml

    Furthermore, it is possible to write a Julia script to run a simulation. Example data to explore how this works can be found here.

    using Wflow
    +Wflow.run(toml_path)

    Julia can also be used to modify settings after reading the settings file. In the example below, we show how to adjust the end date of the simulation.

    using Dates
    +config = Wflow.Config(toml_path)
    +config.endtime = DateTime("2000-01-03T00:00:00")
    +Wflow.run(config)

    Using the command line interface

    If you don't need the extra features of using wflow as a library, but just want to run simulations, the command line interface makes it easier to do so. It consists of a single executable, wflow_cli that accepts a single argument, the path to a TOML configuration file.

    Binaries of wflow_cli can be downloaded from our website download.deltares.nl, and are currently available for Windows.

    After installing you can see three folders in the installation directory. It is only the bin/wflow_cli that is directly used. All three folders need to stay together however. The share folder contains TOML files with more information about the build.

    bin\wflow_cli
    +lib
    +share

    Simply running wflow_cli with no arguments will give the following message:

    Usage: wflow_cli 'path/to/config.toml'

    When starting a run, you will see basic run information on the screen, as well as a progress bar, that gives an estimate of how much time is needed to finish the simulation:

    ┌ Info: Run information
    +│   model_type = "sbm"
    +│   starttime = CFTime.DateTimeStandard(2000-01-01T00:00:00)
    +│   dt = 86400 seconds
    +│   endtime = CFTime.DateTimeStandard(2000-12-31T00:00:00)
    +└   nthreads() = 4
    +
    +Progress: 100%|██████████████████████████████████████████████████| Time: 0:00:27
    diff --git a/previews/PR490/user_guide/step5_output/index.html b/previews/PR490/user_guide/step5_output/index.html new file mode 100644 index 000000000..040778a25 --- /dev/null +++ b/previews/PR490/user_guide/step5_output/index.html @@ -0,0 +1,26 @@ + +Step 5: Analyzing the model output · Wflow.jl

    Step 5: Analyzing the model output

    After running the model example from the previous step 4, the model results can be found in data/output_moselle_simple.csv.

    If required, it is also possible to output netCDF files as output, by modifying the TOML file. An example is shown below:

    # Spatial output
    +[output]
    +path = "data/output.nc"
    +
    +[output.lateral.river]
    +q_av = "q_river"
    +
    +[output.lateral.land]
    +q = "q_land"
    +h = "h_land"
    +
    +# Scalar output (mapped to the specified map)
    +[netcdf]
    +path = "data/output_scalar.nc"
    +
    +[[netcdf.variable]]
    +name = "Q"
    +map = "gauges"
    +parameter = "lateral.river.q_av"
    +
    +[[netcdf.variable]]
    +name = "prec"
    +map = "subcatchment"
    +parameter = "vertical.precipitation"
    +reducer = "mean"

    Using your own preferred programming language, the model output files can be easily read and visualized.